我有一个使用urllib2的Python Web客户端。将HTTP标头添加到我的传出请求中很容易。我只是创建了要添加的标头的字典,并将其传递给Request初始化程序。
但是,其他“标准” HTTP标头以及我显式添加的自定义标头也添加到了请求中。当我使用Wireshark嗅探请求时,除了添加自己的标题外,还会看到标题。我的问题是我如何访问这些标头?我想记录每个请求(包括 完整 的HTTP标头),但不知道如何记录。
有指针吗?
概括地说:如何从urllib2创建的HTTP请求中获取所有传出标头?
如果您想查看发送的文字HTTP请求,并因此而看到每个最后一个标头,都与线路上的表示完全相同,那么您可以告诉urllib2您使用自己的版本(HTTPHandler可以打印(或保存)或其他任何形式)传出的HTTP请求。
urllib2
HTTPHandler
import httplib, urllib2 class MyHTTPConnection(httplib.HTTPConnection): def send(self, s): print s # or save them, or whatever! httplib.HTTPConnection.send(self, s) class MyHTTPHandler(urllib2.HTTPHandler): def http_open(self, req): return self.do_open(MyHTTPConnection, req) opener = urllib2.build_opener(MyHTTPHandler) response = opener.open('http://www.google.com/')
运行此代码的结果是:
GET / HTTP/1.1 Accept-Encoding: identity Host: www.google.com Connection: close User-Agent: Python-urllib/2.6