RAW http-Request mit socket...

Code-Stücke können hier veröffentlicht werden.
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ich wollte mal nachsehen, wie der Header von einem Server bei einem 404 Fehler aussieht:

Code: Alles auswählen

import socket

#~ host = "www.google.de"
#~ host = "www.heise.de"
host = "www.microsoft.com"
port = 80
#~ url = "/gibt_es_nicht_test"
url = "/"

print "Connecte zu %s:%s..." % (host, port),
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
print "OK"

request = [
    "GET %s HTTP/1.1" % url,
    "Host: %s:%s" % (host, port),
    "User-Agent: Python",
    "Accept: text/*",
    "Accept-Charset: ISO-8859-1,utf-8",
    "Connection: close",
]
request = "\r\n".join(request)
request += "\r\n\r\n"

print "Send Request '%s'..." % request.encode("String_Escape"),
s.send( request )
print "OK"

print "Read data...",
data = ""
while 1:
    block = s.recv(1024)
    if not block:
        break
    data += block
print "OK"

print "_"*80
print data.encode("String_Escape")
print "_"*80
print data

s.close()
Beispiel Ausgabe (bis <head> gekürzt!):
Connecte zu www.google.de:80... OK
Send Request 'GET /gibt_es_nicht_test HTTP/1.1\r\n\r\n'... OK
Read data... OK
________________________________________________________________________________
HTTP/1.1 404 Not Found\r\nContent-Type: text/html\r\nServer: GWS/2.1\r\nContent-Length: 1259\r\nDate: Wed, 20 Jul 2005 19:12:07 GMT\r\n\r\n\n\n<html><head>
________________________________________________________________________________
HTTP/1.1 404 Not Found
Content-Type: text/html
Server: GWS/2.1
Content-Length: 1259
Date: Wed, 20 Jul 2005 19:12:07 GMT



<html><head>
Zuletzt geändert von jens am Freitag 24. März 2006, 14:21, insgesamt 2-mal geändert.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ist das nicht etwas, was die httplib schon kann?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Nö, damit sieht man IMHO nicht den zurück geschickten Header vom Sever. Um den geht es mir aber ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Und ich dachte, das geht mit HTTPResponse.getheader :?:
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

OK, es geht mit HTTPResponse.getheaders()... Aber man erhält ein Dict mit den Header-Informationen...
Ich möchte aber gern den genauen Aufbau (Reihenfolge, Zeilenendezeichen) sehen :lol:

EDIT: Hab oben mal eine Beispiel Ausgaben hinzugefügt ;)

EDIT2: In dem Zusammenhang habe ich eine Interessante Webseite gefunden: http://www.bolege.de/whoiam/
Im Thread http://www.python-forum.de/viewtopic.php?t=3635 gibt's vom obrigen Skript auch eine Version mit einer POST anfrage...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Und noch was interessantes in dem zusammenhang gefunden. Mit LiveHTTPHeaders kann man im Firefox die Header in der Sidebar mitverfolgen:

http://livehttpheaders.mozdev.org

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Wollte nur mal anmerken, dass das mit Telnet auch einfacher geht. :-)
TUFKAB – the user formerly known as blackbird
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Und wie füllst du mit telnet ein HTML-Formular aus??? Mit dem Plugin kannst du wirklich Live die HTTP Header sehen... z.B. wenn man irgendwo eingeloggt ist usw.

Probiere es mal aus, ist wirklich nett das Tool...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

jens hat geschrieben:Probiere es mal aus, ist wirklich nett das Tool...
Ich kenns ja wohl, aber das war auch als Antwort zu deinem _ersten_ Post :-)
TUFKAB – the user formerly known as blackbird
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Unahängig vom Sinn und Zweck des eigentlichen Tools (was ich durchaus als sinnvoll erachte, ich hab mir was ähnliches geschrieben, was ich heute abend mal posten kann): Du weißt dass Du Dich nicht an HTTP/1.1 hälst.

Du mußt mindestens einen Connection: <blah> und einen Host: <blah>-Header mitschicken damit Du Dich als HTTP/1.1-Client melden darfst. Das google.de Dir trotzdem Antwortet ist lieb, müssen sie aber nicht.

Im Endeffekt mußt Du also als Request-Header sowas (mindestens!) mitschicken:

Host: www.google.de:80
Connection: close

Genauso wärs sinnvoll einen Client-Typ zu fälschen, damit Du von der Webseite überhaupt eine Antwort kriegst. Und: man kann noch 'ne ganze Menge mehr finden (wie Content-Transfer-Encoding, etc.), was auch für HTTP/1.1-compliance sinnvoll wäre.

Dementsprechend: sei froh dass es mit google.com funktioniert, mit microsoft.com würde es nicht funktionieren (oder sie haben mittlerweilen viel geändert).
--- Heiko.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Gute Idee... Ich hab oben mal das Skript erweitert...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

jens hat geschrieben:Und wie füllst du mit telnet ein HTML-Formular aus?
Wo ist das Problem? telnet kann das, wobei ich für sowas netcat bevorzugen würde.
Das geht auch ganz einfach, denn bei GET-Formularen gibtst du die Felder in der URL an und bei POST schreibst du sie "einfach" in die Verbindung. :twisted:
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten