【问题标题】:Python proxy authentication with Requests and Urlib2使用 Requests 和 Urlib2 的 Python 代理身份验证
【发布时间】:2015-01-07 04:27:10
【问题描述】:

有没有人知道为什么 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 版本:

标题:连接:关闭

标题:代理连接:关闭

请求版本:

标题:连接:保持活动

标题:代理连接:保持活动

我通过修改标头强制请求版本关闭这两个连接

header = {
   "Connection": "close",
   "Proxy-Connection": "close"
}

两者的 GET 请求现在匹配,但是请求版本仍然不起作用。

【问题讨论】:

  • 嗅探不同程序发送的数据包,看看HTTP GET是否不同。

标签: python proxy python-requests


【解决方案1】:

试试这个:

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

【讨论】:

  • 嗨,戴夫,感谢您的回复,我很感激,但是请求代码在互联网页面上不起作用 - 我可能应该更清楚地说明这一点。
【解决方案2】:

有点晚了......但为了将来参考这一行: 代理 = {"http": "http://login:password@proxy1.com:80"}

还应该有第二个用于 https 的键/值对,即使它不会被使用。

还有一个很棒的请求模块,叫做代理请求,它做的事情非常相似:

pip3 install proxy-requests

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 2023-04-06
    • 1970-01-01
    • 2013-10-18
    相关资源
    最近更新 更多