requests 请求网址出错

2018-05-15 09:37:50 +08:00
 302766392
import requests
url = 'https://www.asqql.com/html_zuanti/index_2.html'
res = requests.get(url, verify=False)
res.encoding='gb2312'
print(res.text)

报错:requests.exceptions.SSLError: HTTPSConnectionPool(host='www.asqql.com', port=443): Max retries exceeded with url: /html_zuanti/index_2.html (Caused by SSLError(SSLError("bad handshake: SysCallError(-1, 'Unexpected EOF')",),))

有朋友遇到过这个问题吗,怎么解决呢
6923 次点击
所在节点    Python
14 条回复
zoowii
2018-05-15 09:39:32 +08:00
requests.get( https_url, verify=False)
302766392
2018-05-15 09:43:54 +08:00
一样的, 已知解决方案为:开启 fiddler 捕获情况下发起 requests 请求, 可以正常返回响应体, 想找找有没有更人性化的解决方案
xia0chun
2018-05-15 09:47:36 +08:00
把 fiddler 关掉再运行一下试试
zoowii
2018-05-15 09:50:04 +08:00
如何删除回复啊,看错了
302766392
2018-05-15 09:51:00 +08:00
关掉就报 SSLError 了, 更像是借助了 fiddler 证书才能正常请求, 这也是我无意中测试出来的
msg7086
2018-05-15 10:02:35 +08:00
TLS 1.3 No
TLS 1.2 No
TLS 1.1 No
TLS 1.0 Yes
SSL 3 INSECURE Yes
SSL 2 INSECURE Yes

https://www.ssllabs.com/ssltest/analyze.html?d=www.asqql.com
msg7086
2018-05-15 10:16:23 +08:00
较新版本的 OpenSSL 已经把有漏洞的 Cipher 全部禁用了,所以 TLS 1.0 以下的所有 Cipher 都无法匹配上。

Chrome 能打开是因为 Chrome 还允许最后一个 Weak Cipher:
TLS_RSA_WITH_3DES_EDE_CBC_SHA DES-CBC3-SHA


# TLS 1.0 (suites in server-preferred order)
TLS_RSA_WITH_RC4_128_MD5 (0x4) INSECURE 128
TLS_RSA_WITH_RC4_128_SHA (0x5) INSECURE 128
TLS_RSA_WITH_3DES_EDE_CBC_SHA (0xa) WEAK 112
TLS_RSA_WITH_DES_CBC_SHA (0x9) INSECURE 56
TLS_RSA_EXPORT1024_WITH_RC4_56_SHA (0x64) INSECURE 56
TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA (0x62) INSECURE 56
TLS_RSA_EXPORT_WITH_RC4_40_MD5 (0x3) INSECURE 40
TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 (0x6) INSECURE 40


The connection to this site uses TLS 1.0 (an obsolete protocol), RSA (an obsolete key exchange), and 3DES_EDE_CBC with HMAC-SHA1 (an obsolete cipher).
mayun51
2018-05-15 10:53:47 +08:00
requests.get 请求也有用到 OpenSSL,在爬取 TLS 加密的 HTTPS 网页的时候,所以如果待爬取网站的 TLS 版本过低不被 OpenSSL 支持的话,也是会失败报错的。
jpyl0423
2018-05-15 10:57:45 +08:00
用 NGINX 反代?
alvin666
2018-05-15 10:58:46 +08:00
fiddler 自带证书,所以你 python 发出去没有证书的包 fiddler 给你加了,verify=False 是关闭 https 认证,某些网站可用,如果网站强制 ssl 的话可以 import certifi 或者 import ssl,有问题可以先百度一下,关键字“ python ssl ”
hubqin
2018-05-15 12:28:02 +08:00
请求地址的`https`改为`http`试一下
glasslion
2018-05-15 14:29:38 +08:00
msg7086 的回答才是正解, 我再补充一点, 出现这个错误的根本原因是那个网站 使用的 3DES Cipher 不够安全, 已经被很多库禁用了。除了新版本的 OpenSSL 已经禁用了 3DES 外, 对于老版本的 OpenSSL, requests 本身在 2.11.1 之后, 也禁用了 3DES。如果你的 OpenSSL 版本较老, 可以用下面的方法绕过(或降级 requests )

https://lukasa.co.uk/2017/02/Configuring_TLS_With_Requests/
302766392
2018-05-16 09:55:32 +08:00
谢谢大家的详细解答
woshichuanqilz
2019-07-16 14:57:48 +08:00

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

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

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

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

© 2021 V2EX