python request HTTPS 报错 54, 'Connection reset by peer

2016-06-06 11:02:25 +08:00
 qq7171891

1 、目标是本地电脑(开发环境) request 一个 API ,取得返回的 JSON 。

2 、本地使用 request 请求 API 的 https 地址时,报了这个错:

requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(54, 'Connection reset by peer'))

3 、本地使用 request 请求别的网址: zhihu.comgithub.com ,都用 https ,则不会出错。

4 、上自己的一台服务器请求这个 API 则也不报错。

5 、用本地电脑的 Postman 、火狐里的接口调试工具请求这个 API ,也是 HTTPS ,则又可以正常返回不报错。

6 、确认不是 API 服务器防火墙的问题。

也不知道问题出在哪里,没有思路,请教大神这种问题一般从哪里排查起?

8639 次点击
所在节点    Python
10 条回复
4everLoveU
2016-06-06 11:07:10 +08:00
看看 openssl python
SuperFashi
2016-06-06 11:07:42 +08:00
试试改 ua 头,有可能封了 requests 的默认 ua
anexplore
2016-06-06 12:51:01 +08:00
会不会是证书问题,设置接受任何证书试一试
ayaseangle
2016-06-06 12:59:27 +08:00
reset by peer
qq7171891
2016-06-06 16:54:17 +08:00
@SuperFashi
@anexplore
@ayaseangle

谢谢各位的回答。目前看来是我电脑的问题。别人的电脑 requests.get 就没问题,就我有问题。我自己查查问题出在什么地方。 MACOSX 伤不起啊,人家 WINDOWS 都是好的。
dawncold
2016-06-06 19:05:03 +08:00
应该用 curl 试一下
haofly
2016-06-07 09:13:35 +08:00
前几天我也遇到过这个问题,我是因为把 requests 的 get 和 post 的使用方法搞错了, get 的参数是 param ,而 post 的参数是 data
qq7171891
2016-06-07 16:55:26 +08:00
@haofly 我没有附加任何参数。服务器看了下请求的情况,服务器收到请求,回文失败了。。正在查原因中……看起来是本地环境出了问题。
qq7171891
2016-06-07 16:55:36 +08:00
@dawncold curl 是通的。
qq7171891
2016-06-08 10:52:10 +08:00
已解决。
原因是服务器上 ssl_protocols TLSv1.2 TLSv1.1 已经不支持 TLSv1 ,没有 TLSv1 的支持, MAC 里的 OpenSSL 不是最新版本就会出现这个错误。

解决方案:服务器开 TLSv1 支持,或者更新自己电脑的 OpenSSL 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/283794

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX