Python urllib, 메시지를 보는 방법?
문제
urllib shttp 요청에서 다시 전송되는 메시지를 볼 수있는 방법은 무엇입니까? 간단한 HTTP라면 소켓 트래픽을 보지만 물론 HTTPS에는 효과가 없습니다. 설정할 수있는 디버그 플래그가 있습니까?
import urllib
params = urllib.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})
f = urllib.urlopen("https://example.com/cgi-bin/query", params)
해결책
아니요, 이것을 볼 수있는 디버그 플래그가 없습니다.
좋아하는 디버거를 사용할 수 있습니다. 가장 쉬운 옵션입니다. Urlopen 함수에 중단 점을 추가하면 완료됩니다.
또 다른 옵션은 자신의 다운로드 기능을 작성하는 것입니다.
def graburl(url, **params):
print "LOG: Going to %s with %r" % (url, params)
params = urllib.urlencode(params)
return urllib.urlopen(url, params)
다음과 같이 사용하십시오.
f = graburl("https://example.com/cgi-bin/query", spam=1, eggs=2, bacon=0)
다른 팁
항상 약간의 mokeypatching을 할 수 있습니다
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)
출력을 제공합니다
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
제휴하지 않습니다 StackOverflow