Seite 1 von 2
warum GET ich nichts ?
Verfasst: 15.03.2005 17:33
von OptimusPrime
Diesen (etwas abgewandelten) Code habe ich von einem netten Poster
aus diesem Forum bekommen,
es ging um einen HTTP GET auf beliebige Internetseiten.
Ich habe mittlerweile unzählige Header, Server und Seiten ausprobiert,
das Beste, was ich je als Antwort bekommen habe war :
404 Bad Request...
In diesem Fall versuche ich auf meinen eigenen Server (Localhost) zuzugreifen, erfolglos.
nach etwa 20 sekunden erscheint der Requester - leer.
Was mach ich denn nur Falsch ?
Für die Webseiten habe ich mir Server herausgesucht, genaue Zielpfade für das GET, aber nix.
Code: Alles auswählen
Global a$
a$="GET /index.html HTTP/1.0"
Procedure HTTPRequest()
InitNetwork()
ServerID=OpenNetworkConnection("127.0.0.1",80)
SendNetworkString(ServerID, a$)
mem=AllocateMemory(10240)
Repeat
ReceiveNetworkData(ServerID,mem,10240)
dat$=PeekS(mem)
MessageRequester("Received Data: ",dat$,0)
CloseNetworkConnection(ServerID)
Break
ForEver
EndProcedure
HTTPRequest()
Edit by NicTheQuick: Code-Tags gesetzt
Re: warum GET ich nichts ?
Verfasst: 15.03.2005 19:09
von traumatic
Ein einfaches GET reicht nicht.
Je nach Server werden weitere Dinge erwartet, z.B. der Host, User-Agent, akzeptierte MIME-Types etc.,
ausserdem sind die CRLFs sehr wichtig...
Hast Du schonmal auf PureArea oder im Forum gesucht?
Da gibt's sicherlich gute Beispiele.
Das Minium dürfte so aussehen:
Code: Alles auswählen
a$ = "GET / HTTP/1.0" + #CRLF$
a$ + "Host: www.purebasic.com" + #CRLF$
a$ + "Referer: www.purebasic.com" + #CRLF$
a$ + #CRLF$
Das wird aber nicht bei jedem Server funktionieren.
Bei
www.purebasic.com geht's, kannst Du ja mal Testweise ausprobieren...
...
Verfasst: 15.03.2005 21:07
von OptimusPrime
Nun weiss ich, dass ich schon mal nicht ganz auf dem Holzweg war ;o)))
Danke für die Tipps, die Mime Typen werde ich dann noch anpassen !
Vielen Dank !
Verfasst: 15.03.2005 21:28
von Laurin
Ich muss traumatic zustimmen, GET alleine reicht nicht. Der Server erwartet meist mehr Angaben.
Hier dein Code, den ich etwas umgebaut habe. Er funzt einwandfrei bei mir.
Code: Alles auswählen
Procedure HTTPRequest(a$)
If InitNetwork()
Debug "Netzwerk erkannt"
Else
Debug "Netzwerkfehler"
End
EndIf
ServerID=OpenNetworkConnection("forums.purebasic.com",80)
If ServerID
Debug "Verbindung aufgebaut"
Else
Debug "Verbindung konnte nicht aufgebaut werden"
End
EndIf
SendNetworkString(ServerID, a$)
Debug "GET-Header gesendet"
*mem=AllocateMemory(10240)
Repeat
NetworkEvent = NetworkClientEvent(ServerID)
If NetworkEvent = 2
Debug "Daten empfangen"
Laenge = ReceiveNetworkData(ServerID, *mem, 10240)
dat$=PeekS(*mem, Laenge)
MessageRequester("Received Data: ",dat$,0)
CloseNetworkConnection(ServerID)
Debug "Verbindung geschlossen"
Quit = 1
EndIf
Until Quit = 1
EndProcedure
HTTPRequest("GET /index.html HTTP/1.0" + #CRLF$ + "User-Agent: PB/3.93" + #CRLF$ + #CRLF$)
Greetz Laurin
Verfasst: 15.03.2005 21:33
von bluejoke
Es würde mich äußerst Wundern, wenn der Referrer zu dem minimal-header gehört. In meinen logs sind etliche Seitenaufrufe ohne Referrer gespeichert, was immer dann passiert, wenn der Client keinem Link gefolgt ist, sondern die URL irgendwoher selbst wusste.
Verfasst: 15.03.2005 21:39
von Laurin
Habe gerade probiert, den von mir modifizierten Code ohne User-Agent laufen zu lassen. Geht auch.
Damit reduziert sich der minimale GET-Header auf "GET (Datei) HTTP/1.0". Ich erinnere mich aber dunkel, dass man eigendlich mehr Angaben im Header machen soll. Muss wohl nochmal die RFC zu HTTP lesen.
Greetz Laurin
Verfasst: 15.03.2005 22:41
von traumatic
bluejoke hat geschrieben:Es würde mich äußerst Wundern, wenn der Referrer zu dem minimal-header gehört. In meinen logs sind etliche Seitenaufrufe ohne Referrer gespeichert, was immer dann passiert, wenn der Client keinem Link gefolgt ist, sondern die URL irgendwoher selbst wusste.
Yo, referer war natürlich quatsch, wobei
harmlos ist und ebenso keinen Eintrag in Deinen Logfiles machen würde.
"Host" scheint aber unabdingbar zu sein, Laurins Code funktioniert z.B.
bei
www.pure-board.de nicht für 'ne Mark
Selbiges gilt für alle anderen virtuellen Schlund (1&1, Puretec, etc.) Server.
Verfasst: 16.03.2005 02:59
von Laurin
Nanu, "Verbindung konnte nicht aufgebaut werden"?
Ist ja sehr merkwürdig. Muss man bei den VServern eine spezielle Verbindung aufbauen?
Greetz Laurin
Verfasst: 16.03.2005 10:16
von traumatic
Laurin hat geschrieben:Nanu, "Verbindung konnte nicht aufgebaut werden"?
Ist ja sehr merkwürdig. Muss man bei den VServern eine spezielle Verbindung aufbauen?
Eigentlich sollte die Fehlermeldung eine 500 sein.
Wie dem auch sei, die ganzen Domains werden ja alle zu ein und derselben
IP aufgelöst, das Verzweigen in das entsprechende Verzeichnis läuft über
die Domain-Namen. Deshalb muss hier der Host mit übergeben werden.
Verfasst: 16.03.2005 16:42
von Laurin
Ich hab auf pure-board.
com statt auf pure-board.
de getestet. Drum konnte er keine Verbindung aufbauen.
Es ist eine 404 Not Found und anschließend ein 500 Internal Server Error.
Der 500 kommt aber nur, weil eine Fehlerseite für 404 nicht existiert
Ich denke, ich werde mich mal nochmal daran ransetzen und schauen, ob ich das nicht doch irgendwie zum Laufen bekommen.