Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python请求库可以';在代理后面时,无法处理HTTPS URL的重定向_Python_Https_Proxy_Python Requests_Urllib3 - Fatal编程技术网

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

Python请求库可以';在代理后面时,无法处理HTTPS URL的重定向,python,https,proxy,python-requests,urllib3,Python,Https,Proxy,Python Requests,Urllib3,我想我发现了在使用HTTPS时请求库处理重定向的问题。据我所知,这只是服务器将请求客户端重定向到另一个HTTPS资源时的问题 我可以向您保证,我使用的代理支持HTTPS和CONNECT方法,因为我可以在浏览器中使用它。我使用的是请求库的2.1.0版本,它使用的是urllib3库的1.7.1版本 我在wireshark中观看了交易,我可以看到的第一笔交易,但我没有看到的任何交易。当我使用调试器调试堆栈中任何更深的部分时,我总是会超时,所以我不知道从这里开始该怎么做。由于重定向,我肯定看不到对/ho

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

我可以向您保证,我使用的代理支持HTTPS和CONNECT方法,因为我可以在浏览器中使用它。我使用的是请求库的2.1.0版本,它使用的是urllib3库的1.7.1版本

我在wireshark中观看了交易,我可以看到的第一笔交易,但我没有看到的任何交易。当我使用调试器调试堆栈中任何更深的部分时,我总是会超时,所以我不知道从这里开始该怎么做。由于重定向,我肯定看不到对/home的请求。因此,它必须在发送到代理之前在代码中出错

我想知道这是否真的是一个bug,或者我是否做错了什么。只要您有权访问可以发送流量的代理,就很容易复制。请参阅下面的代码:

导入请求
代理命令={
“http”:”http://127.0.0.1:8080",
“https”:”http://127.0.0.1:8080"
}
#当它尝试执行重定向到/home时,由于“requests.exceptions.ProxyError:无法连接到代理。套接字错误:[Errno 111]连接被拒绝”,此操作失败
r=请求。获取(“https://www.paypal.com/,proxies=proxiesDict)
#这是成功的。
r=请求。获取(“https://www.paypal.com/home,proxies=proxiesDict)
直接使用urllib3时也会发生这种情况。这可能主要是urllib3中的一个bug,请求在引擎盖下使用,但我使用的是更高级别的请求库。见下文:

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中的一个错误。我们正在跟踪它。

它失败了,但什么是回溯?它适用于任何其他网站吗?@Games我添加了回溯。@Truerror你说得对,它适用于大多数其他网站。它为我和我工作。两者都使用HTTP代码301重定向(永久移动)。然而,我注意到Paypal返回了一个302(find)。这似乎就是不同之处。这里有一个链接,指向一个非常类似的问题的修复方法,以及由此产生的讨论,您可能会发现这很有启发性:谢谢Lukasa。知道补丁什么时候准备好吗?有什么我能做的吗?坦白说,不知道。取决于某人何时有时间坐下来,理解并修复它。如果你想自己修理它,欢迎你这么做!