PythonUrlLib使用特定URL冻结
我正在尝试获取一个页面,但urlopen挂起并且从不返回任何内容,尽管该网页非常轻,可以用任何浏览器打开,没有任何问题PythonUrlLib使用特定URL冻结,python,python-3.x,urllib,urlopen,Python,Python 3.x,Urllib,Urlopen,我正在尝试获取一个页面,但urlopen挂起并且从不返回任何内容,尽管该网页非常轻,可以用任何浏览器打开,没有任何问题 import urllib.request with urllib.request.urlopen("http://www.planalto.gov.br/ccivil_03/_Ato2007-2010/2008/Lei/L11882.htm") as response: print(response.read()) 这个简单的代码在检索响应时会冻结,但是如果您尝试打
import urllib.request
with urllib.request.urlopen("http://www.planalto.gov.br/ccivil_03/_Ato2007-2010/2008/Lei/L11882.htm") as response:
print(response.read())
这个简单的代码在检索响应时会冻结,但是如果您尝试打开它,它会毫无问题地打开www.planalto.gov.br正在使用用户代理检测。如果指定了有效的用户代理,则请求将正确完成。urllib库没有崩溃,只是在等待
curl -H "User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" http://www.planalto.gov.br/ccivil_03/_Ato2007-2010/2008/Lei/L11882.htm
对我来说很好,但是
curl http://www.planalto.gov.br/ccivil_03/_Ato2007-2010/2008/Lei/L11882.htm
没有
就像上面提到的RPGillespie一样,使用urllib2或requests来添加用户代理头(有关详细信息,请参阅)。一个选项是使用wireshark来查看python请求和浏览器请求之间的差异。第二个选项是尝试不同的命令行工具。您是否能够使用
curl
或wget
提取数据?如果不是,则表示存在代理设置之类的环境问题。第三种选择是尝试urllib
的替代方案,例如(作为一个长期使用python的用户,我强烈推荐它),顺便说一句,感谢您的评论,我能够同时执行wget
和curl
。我尝试使用请求,但它只是在试图解决类似问题时冻结了这个问题。cURL或浏览器可以很好地打开,但urlopen不能。然后我发现它只发生在wi-fi上,但在使用有线以太网插孔时工作正常。最终(我认为)连接的地址解析部分在使用wi-fi时尝试使用IPv6解析。禁用了wi-fi连接的IPv6(在Ubuntu上),urlopen在此之后工作正常。