代理背后的 Python 请求

Posted

技术标签:

【中文标题】代理背后的 Python 请求【英文标题】:Python Requests behind proxy 【发布时间】:2016-03-07 18:31:16 【问题描述】:

我使用公司代理(Isa 服务器)。

使用 urllib2 时,我可以毫无问题地通过代理连接到互联网,但使用 requests 库时,我不能。

这是我的 urllib2 代码:

proxy = urllib2.ProxyHandler()
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)

page = urllib2.urlopen('http://www.google.com')
print page.getcode()

这会打印“200”并且工作正常

但是,当我对请求执行相同操作时,我得到一个 407 代码并且不起作用。

proxy_dict = 
    'http': 'http://10.20.23.5:8080',
    'https': 'ftp://10.20.23.5:8080',
    'ftp': 'https://10.20.23.5:8080'


page = requests.get('http://www.google.com', proxies=proxy_dict)
print page.status_code
print page.reason

这将打印“407”和原因:“需要代理身份验证(Forefront TMG 需要授权才能完成请求。拒绝访问 Web 代理过滤器。)”

即使我通过请求来自 urllib2 的代理也不起作用:

page = requests.get('http://http://www.google.com', proxies=urllib2.getproxies())

Urllib2 正在做一些请求没有做的事情。

有什么帮助吗?

【问题讨论】:

【参考方案1】:

如果您的代理需要身份验证,您需要设置这些变量:

proxy_dict = 
    'http': 'http://username:password@10.20.23.5:8080',
    'https': 'https://username:password@10.20.23.5:8080',
    'ftp': 'ftp://username:password@10.20.23.5:8080'

【讨论】:

为什么 urllib2 没有用户名和密码也能工作? 签出this。可能会有帮助。

以上是关于代理背后的 Python 请求的主要内容,如果未能解决你的问题,请参考以下文章

NGINX 反向代理背后的 Spring Boot API REST

非默认端口上的反向代理背后的 Spring Boot Cors

Python学习————正向代理和反向代理

代理技术 | 重磅,代理服务器背后的故事(正向反向代理)

如何在 Python 请求上轮换代理

Python爬虫 - requests(高级)