Python urllib, wie Nachrichten zu sehen?
Frage
Wie kann ich sehe die Nachrichten zurück und für Anforderungen an urllib SHTTP gesendet? Wenn es einfach http wäre, würde ich einfach den Socket-Verkehr beobachtet aber das ist natürlich für https nicht funktionieren. Gibt es eine Debug-Flag I gesetzt ist, dass dies tun?
import urllib
params = urllib.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})
f = urllib.urlopen("https://example.com/cgi-bin/query", params)
Lösung
Nein, es gibt keinen Debug-Flag dies zu beobachten.
Sie können Ihre Lieblings-Debugger verwenden. Es ist die einfachste Option. Fügen Sie einfach einen Haltepunkt in der urlopen Funktion und Sie sind fertig.
Eine andere Möglichkeit wäre eine eigene Download-Funktion schreiben:
def graburl(url, **params):
print "LOG: Going to %s with %r" % (url, params)
params = urllib.urlencode(params)
return urllib.urlopen(url, params)
Und es wie folgt verwendet werden:
f = graburl("https://example.com/cgi-bin/query", spam=1, eggs=2, bacon=0)
Andere Tipps
Sie können immer ein wenig mokeypatching tun
import httplib
# override the HTTPS request class
class DebugHTTPS(httplib.HTTPS):
real_putheader = httplib.HTTPS.putheader
def putheader(self, *args, **kwargs):
print 'putheader(%s,%s)' % (args, kwargs)
result = self.real_putheader(self, *args, **kwargs)
return result
httplib.HTTPS = DebugHTTPS
# set a new default urlopener
import urllib
class DebugOpener(urllib.FancyURLopener):
def open(self, *args, **kwargs):
result = urllib.FancyURLopener.open(self, *args, **kwargs)
print 'response:'
print result.headers
return result
urllib._urlopener = DebugOpener()
params = urllib.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})
f = urllib.urlopen("https://www.google.com/", params)
gibt die Ausgabe
putheader(('Content-Type', 'application/x-www-form-urlencoded'),{})
putheader(('Content-Length', '21'),{})
putheader(('Host', 'www.google.com'),{})
putheader(('User-Agent', 'Python-urllib/1.17'),{})
response:
Content-Type: text/html; charset=UTF-8
Content-Length: 1363
Date: Sun, 09 Aug 2009 12:49:59 GMT
Server: GFE/2.0
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow