使用Requests和Urlib2进行Python代理身份验证

时间:2015-01-07 04:27:10

标签: python proxy python-requests

有没有人对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请求都匹配,但请求版本仍然不起作用。

2 个答案:

答案 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

https://pypi.org/project/proxy-requests/