有没有人对Urlib2版本返回网页的原因有任何想法,而Requests版本返回连接错误:
[Errno 10060]连接尝试失败,因为连接方 一段时间后没有正确回应,或确立 连接失败,因为连接的主机无法响应。
Urllib2代码(工作):
import urllib2
proxy = urllib2.ProxyHandler({'http': 'http://login:password@proxy1.com:80'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
wPage = urllib2.urlopen('http://www.google.com/')
print wPage.read();
请求代码(不工作 - Errno 10060):
import requests
proxy = {"http": "http://login:password@proxy1.com:80"}
wPage = requests.get('http://www.google.com/', proxies=proxy)
print wPage.text
请求版本返回内部网页,但在网页上显示错误。
我正在运行Python 2.7
*编辑*
根据m170897017的建议,我查找了GET请求中的差异。唯一的区别在于连接和代理连接。
Urllib2版本:
标题:连接:关闭
标题:代理连接:关闭
请求版本:
标题:连接:Keep-Alive
标题:代理连接:保持活跃
我强制Requests版本通过修改标题
来关闭这两个连接header = {
"Connection": "close",
"Proxy-Connection": "close"
}
现在两者的GET请求都匹配,但请求版本仍然不起作用。
答案 0 :(得分:0)
试试这个:
import urllib2
proxy = urllib2.ProxyHandler({'http': '1.1.1.1:9090'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
response = urllib2.urlopen('http://www.google.com/')
datum = response.read().decode("UTF-8")
response.close()
print datum
答案 1 :(得分:0)
有点晚了...但是为了将来参考,请参考以下内容: proxy = {“ http”:“ http://login:password@proxy1.com:80”}
还应该为https提供第二个键/值对,即使它不会被使用。
还有一个很棒的请求模块,称为代理请求,其功能非常相似:
pip3 install proxy-requests