我正在编写一个使用几个第三方web API的web应用程序,我想要跟踪ad-hock分析的低级别请求和响应。所以我正在寻找一个方法,可以让Python的urllib2记录所有通过超文本传输协议传输的字节。也许是一个子类的处理程序?
发布于 2009-07-25 08:22:37
好了,我已经找到了如何设置这个库的内置调试机制:
import logging, urllib2, sys
hh = urllib2.HTTPHandler()
hsh = urllib2.HTTPSHandler()
hh.set_http_debuglevel(1)
hsh.set_http_debuglevel(1)
opener = urllib2.build_opener(hh, hsh)
logger = logging.getLogger()
logger.addHandler(logging.StreamHandler(sys.stdout))
logger.setLevel(logging.NOTSET)
但我仍然在寻找一种方法来丢弃所有传输的信息。
发布于 2009-12-04 11:11:00
这看起来相当棘手。在urllib2、urllib或httplib (本文构建的基础)中没有用于截取输入或输出数据的钩子。
我唯一想到的事情,除了切换策略来使用外部工具(有很多,大多数人都在使用这样的工具),就是在你自己的新模块(比如" capture_socket“)中编写socket.socket的子类,然后使用”导入capture_socket;导入httplib;httplib.socket =capture_socket“将其插入到httplib中。您必须将所有必要的引用(在httplib中使用的任何形式为"socket.foo“的引用)复制到您自己的模块中,然后您可以重写子类中的recv()和sendall()等内容来对数据执行您喜欢的操作。
如果您使用SSL,可能会出现复杂的情况,我不确定这是否足够,或者您是否还必须自己制作socket._fileobject。不过,这看起来是可行的,仔细阅读标准库中的httplib.py和socket.py源代码会告诉您更多信息。
https://stackoverflow.com/questions/1170744
复制相似问题