在代理后面时,Python请求库无法处理HTTPS URL的重定向

卡住了

我想我发现使用HTTPS时请求库的重定向处理存在问题。据我所知,这只是服务器将请求客户端重定向到另一个HTTPS资源时的问题。

我可以向您保证,我正在使用的代理支持HTTPS和CONNECT方法,因为我可以将其与浏览器一起使用。我使用的是Requests库的2.1.0版本,而它使用的是urllib3库的1.7.1。

我看到在Wireshark的交易,我可以看到第一个交易https://www.paypal.com/,但我没有看到任何东西https://www.paypal.com/home当使用调试器调试堆栈中的任何更深层内容时,我总是会超时,因此我不知道从这里开始。由于重定向,我绝对看不到对/ home的请求。因此,在将其发送到代理之前,它必须在代码中出错。

我想知道这是否真的是一个错误或我做错了什么。只要您可以访问可通过其发送流量的代理,它的复制就非常容易。请参见下面的代码:

import requests

proxiesDict = {
    'http': "http://127.0.0.1:8080",
    'https': "http://127.0.0.1:8080"
}

# This fails with "requests.exceptions.ProxyError: Cannot connect to proxy. Socket error: [Errno 111] Connection refused." when it tries to follow the redirect to /home
r = requests.get("https://www.paypal.com/", proxies=proxiesDict)
# This succeeds.
r = requests.get("https://www.paypal.com/home", proxies=proxiesDict)

直接使用urllib3时也会发生这种情况。这可能主要是urllib3中的一个错误,Requests在后台使用它,但是我使用的是更高级别的请求库。见下文:

proxy = urllib3.proxy_from_url('http://127.0.0.1:8080/')

# This fails with the same error as above.
res = proxy.urlopen('GET', https://www.paypal.com/)
# This succeeds
res = proxy.urlopen('GET', https://www.paypal.com/home)

这是使用请求时的回溯:

Traceback (most recent call last):
  File "tests/downloader_tests.py", line 22, in test_proxy_https_request
    r = requests.get("https://www.paypal.com/", proxies=proxiesDict)
  File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 55, in get
    return request('get', url, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 44, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 382, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 505, in send
    history = [resp for resp in gen] if allow_redirects else []
  File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 167, in resolve_redirects
    allow_redirects=False,
  File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 485, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/adapters.py", line 375, in send
    raise ProxyError(e)
requests.exceptions.ProxyError: Cannot connect to proxy. Socket error: [Errno 111] Connection refused.

更新:

仅使用302(找到)重定向​​而不是使用常规301重定向(永久移动),才可能出现此问题。另外,我注意到在Chrome浏览器中,Paypal不会返回重定向。我确实在使用请求时看到了重定向-即使我为此实验借用了Chrome的用户代理。我正在寻找更多返回302的URL,以获取更多数据点。

我需要使用它来处理所有URL,或者至少了解为什么我会看到这种行为。

卢卡斯

这是urllib3中的错误。我们将其作为urllib3问题#295进行跟踪

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

重定向时的URL编码

来自分类Dev

重定向时的URL编码

来自分类Dev

Django:当目标URL也是重定向时测试重定向

来自分类Dev

Nginx代理重定向而不更改URL

来自分类Dev

Nginx代理重定向而不更改URL

来自分类Dev

HTTPS重定向到特定的URL

来自分类Dev

无法重定向到烧瓶中的URL

来自分类Dev

在Nginx中无法重定向URL

来自分类Dev

URL无法在SWITCH PHP中重定向

来自分类Dev

JavaScript无法用于URL重定向

来自分类Dev

使用Backbone重定向时,URL变形了

来自分类Dev

重定向URL时R抓取(302)

来自分类Dev

注销时如何更改重定向URL?

来自分类Dev

URL包含参数时的.htaccess重定向

来自分类Dev

使用Backbone重定向时,URL变形了

来自分类Dev

重定向URL时R抓取(302)

来自分类Dev

在烧瓶中重定向 URL 时出错

来自分类Dev

python pycurl获取最终的URL重定向

来自分类Dev

使用 Python 查找最终重定向的 url

来自分类Dev

在代理后面滚动/重定向到https

来自分类Dev

如何通过请求库获取重定向的URL或其内容?

来自分类Dev

将特定URL的请求重定向到其他URL

来自分类Dev

在Django中重定向时处理URL片段

来自分类Dev

在Django中重定向时处理URL片段

来自分类Dev

POST后进行重定向并传递数据时,重定向URL的持久性

来自分类Dev

.htaccess使用用户代理的URL重定向

来自分类Dev

反向代理vs重定向vs提取URL

来自分类Dev

urllib2 允许使用代理重定向 url

来自分类Dev

Watir-Webdriver,PhantomJS和重定向到https的URL