您好Stackoverflow社区,
我正在尝试熟悉urllib.request标准库,并在我的脚本中使用它而不是wget。 然而,我无法在IDLE中显示详细的HTTP消息,也不能使用脚本文件或手动将命令键入cmd(py)。
我在Windows 7 x64上使用Python,尝试3.5和3.6包括3.6.1rc1但没有成功。
假设使用此命令打开消息:
http.client.HTTPConnection.debuglevel = 1
所以这是我的示例代码。它有效但没有显示细节:
import http.client
import urllib.request
http.client.HTTPConnection.debuglevel = 1
response = urllib.request.urlopen('http://stackoverflow.com')
content = response.read()
with open("stack.html", "wb") as file:
file.write(content)
我尝试过使用.set_debuglevel(1)但没有成功。 这里似乎有几年的问题 Turning on debug output for python 3 urllib 然而,这和我一样,而且不起作用。另外在这个问题的评论用户 Yen Chi Hsuan 说这是一个错误并在此报告 https://bugs.python.org/issue26892
该漏洞已于2016年6月关闭,因此我希望在最近的Python版本中对此进行更正。
也许我错过了某些东西(比如需要启用/安装其他东西等等)但是我花了一些时间在这上面并走到了尽头。
是否有一种工作方式可以在Windows上的Python 3上使用urllib显示http详细消息?
谢谢
编辑: pvg 建议的响应适用于简单示例,但我无法在需要登录的情况下使其工作。 HTTPBasicAuthHandler没有此debuglevel属性。当我尝试将多个处理程序组合到开启器中时,它也不起作用。
userName = 'mylogin'
passWord = 'mypassword'
top_level_url = 'http://page-to-login.com'
# create an authorization handler
passman = urllib.request.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, top_level_url, userName, passWord);
auth_handler = urllib.request.HTTPBasicAuthHandler(passman)
opener = urllib.request.build_opener(auth_handler)
urllib.request.install_opener(opener)
result = opener.open(top_level_url)
content = result.read()
答案 0 :(得分:0)
您链接的问题中的示例显示了工作代码,下面转载的版本:
ifstream::clear()
这非常笨重,另一个选择是使用更友好的库,如urllib3(http://urllib3.readthedocs.io/en/latest/)。
import urllib.request
handler = urllib.request.HTTPHandler(debuglevel=10)
opener = urllib.request.build_opener(handler)
content = opener.open('http://stackoverflow.com').read()
print(content[0:120])
如果您决定使用请求库,则以下答案描述了如何设置日志记录:
How can I see the entire HTTP request that's being sent by my Python application?