【问题标题】:ProxyError only on post requests, not on getProxyError 仅在 post 请求上,而不是在 get 上
【发布时间】:2014-09-28 13:10:14
【问题描述】:
import requests

s = requests.session()
s.proxies = {'https': 'https://xxx.xxx.xxx.xxx:8888'}
s.get("https://www.tumblr.com/")
s.post("https://www.tumblr.com/")

GET 可以正常工作,但 POST 会抛出 ProxyError。任何想法为什么?

ProxyError:无法连接到代理。套接字错误:隧道连接 失败:400 错误请求。

【问题讨论】:

  • 尝试改用s.proxies = {'https': 'http://xxx.xxx.xxx.xxx:8888'}。我们对 HTTPS 代理的支持非常糟糕
  • 同样的错误。之前我也在修修补补。
  • 你用的是哪个版本的python?
  • 2.7 的哪个次要版本(例如 2.7.8)?
  • 本地机器上的 Python 2.7.5

标签: python python-2.7 https python-requests


【解决方案1】:

可能的原因是代理服务器错误地重置连接或会话连接池无法理解它已关闭。 如果您不需要连接池,您可以使用

import requests

proxies = {'https': 'https://xxx.xxx.xxx.xxx:8888'}
requests.get("https://www.tumblr.com/", proxies=proxies)
requests.post("https://www.tumblr.com/", proxies=proxies)

更新。它与issue 相关,显然将在即将发布的 > 2.3.0 中修复。目前请求的主分支也可以正常工作。

【讨论】:

  • 这行得通。会话失败的任何其他可能原因?
  • 我很确定没有其他原因,因为 requests.post 和 get 方法创建 Session 对象实例并发出一个请求,然后它 Session 被删除。您的问题将出现在一个会话获取或发布中通过代理请求的多个连续请求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-04
  • 2018-10-29
  • 2020-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多