RAW http-Request mit socket...

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

Mittwoch 20. Juli 2005, 18:54

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.

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 20. Juli 2005, 19:15

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

Mittwoch 20. Juli 2005, 19:27

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 20. Juli 2005, 19:33

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

Mittwoch 20. Juli 2005, 19:37

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...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 23. März 2006, 22:02

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

http://livehttpheaders.mozdev.org

CMS in Python: http://www.pylucid.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:

Freitag 24. März 2006, 04:47

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

Freitag 24. März 2006, 08:07

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...

CMS in Python: http://www.pylucid.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:

Freitag 24. März 2006, 11:14

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:

Freitag 24. März 2006, 11:44

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
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Freitag 24. März 2006, 14:22

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 24. März 2006, 18:26

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 Modvoice
Antworten