2

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)
4

2 に答える 2

2

あなたはいつでもちょっとした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
于 2009-08-09T12:53:00.780 に答える
1

いいえ、これを監視するデバッグ フラグはありません。

お気に入りのデバッガーを使用できます。これは最も簡単なオプションです。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)
于 2009-08-09T11:55:40.707 に答える