我的 python 版本是 3.11.1, 用 requests 或者 httpx 做 http 请求时经常遇到 ssl 错误,忽略证书验证就会提示一大串警告,或者就是直接超时,正常时不可能超时的,不知道这个时间消耗在了哪里,不知道是不是还是 ssl 的问题,搞不懂 python 的 ssl 到底要怎么搞
不知道是个例还是大家都一样、还是需要配置哪里我没搞对
同样的地址和请求方式我用 GO 从来没遇到过超时和稀奇古怪的问题,没一点毛病
有时候临时写个小脚本想用 python 快速写一下,用完就删了,就会出现上面的毛病,本来很简单的事要搞好久,有时候还是用 GO 再重写一遍。。。

from requests.packages.urllib3.exceptions import InsecureRequestWarningrequests.packages.urllib3.disable_warnings(InsecureRequestWarning)这个?

这个是关闭了 ssl 的警告信息,对请求没有改善. 超时,好像还有 SSL 直接报错的情况

具体是访问那个网址? 3.11 默认配置对证书更严格,你可以自定义 sslcontext ,或者不校验证书

www.python-httpx.org/advanced/#changing-the-verification-defaultsr = httpx.get(" example.org", verify=False)

OP 这个问题有这么几个可能。1.开了代理,CFW 之类的,我的 py 运行的时候有时候会受代理的影响,如果你需要让 py 的请求过代理,可以这么写。以 requests 为例:my_proxy = {‘https’: '127.0.0.1:7890'} requests.get(url, proxies=my_proxy)。其中那个 dict 的地址按照自己实际情况来写。2.缺少 urllib3 这个库,你可以用 pip 安装一下,我是在部署云函数(3.10)的时候发现了类似的问题,安装了之后就不会报错了如果可以的话放一下代码和报错信息

我也是经常碰到这个 恶心的不行🤢特意安装了 GUI 版本的运行 Install Certificates.command 也不行有些是直接安装 prebuilt binary ,比如 yt-dlp 一堆 ssl error

没有特定的地址,感觉好多都会🙁 一半都是 verify=False 总不能为了发个 HTTP 请求还去倒个证书用吧 是开了代理、我 Surge 常挂,不过我用 pycharm 启动的是走不了代理的,urllib3 这个库也装了,好像装 requests 的时候就会一起装上奇怪的问题主要是 SSL 偶尔会直接报错,确定设置了 verify=False再就是莫名其妙的超时,我也说不清是不是超时,我感觉像,但是 err 信息是空白,正常来讲访问的地址是不可能超时的

connect timeout read timeout 之类的设置小一点,总有一个出错的。

我一般设置 timeout=(10,10)请求的时候有时候感觉也确实等了有 10 秒左右,就 err 了,但是 err 信息是""但是请求的地址正常是不可能耗时 10 秒不返回的,正常 1-2S 就返回了

设置成 (0,5, 10) 和 (10, 1) 看看到底哪个环节出的问题。目测应该是 dns 查挂了。

如果是 DNS 挂了那为啥当时我马上用 GO 重写一遍就没一点问题,好几次了都是 python 写完再用 GO 重写一遍。。。

“urllib3 这个库也装了,好像装 requests 的时候就会一起装上”这个确实,但是最好手动装一下确认一下,我云函数那个 case 就是,在本地确认有这个库存在,但是一传到云端就出问题,重新装一下就好了。我记得好像 pycharm 是调的 powershell ,好像是默认走代理的吧,Surge 我没用过,具体看 OP 自己的情况了

嗯嗯、也感谢你的回答

我认为就是代理的问题,见知乎文章 zhuanlan.zhihu.com/p/350015032可以在 requests 请求中添加代理参数 requests.get(url, proxies=my_proxy)我一般会直接在代码开头设置环境变量也能解决os.environ['http_proxy'] = ' 127.0.0.1:7890'os.environ['https_proxy'] = ' 127.0.0.1:7890'一般情况下,我是在系统变量中直接添加代理环境变量 HTTP_PROXY= 127.0.0.1:7890 ,HTTPS_PROXY= 127.0.0.1:7890 ,不过这就需要代理软件一直打开了此外,由于代理这个问题也可能导致 pip 下载失败(用到 urilib3 库),反正就很搞

这 9 成是代理问题,下次遇到你可以试试禁用代理的方案,或者先关掉所有网络科技。

有同样的疑惑,出现在 Python 编写的包管理器 dnf 上,切换代理经常导致整个 dnf 程序没有一点输出 hang 住 40 多秒

(注:不是指在程序运行时切换代理,是程序 hang 住这个时间段曾经有切换代理的操作

#15 可能是 pycharm 代理问题,我用 langchain 请求 chatgpt api ,明明没有配置代理,却能通(本机开了代理),可以试试打包到服务器上看看

hang 住期间切换应该是不会影响环境变量的环境变量是“一次性”的

不是在 dnf 运行时切换代理,是切换代理容易导致出现这个问题

但是你刚才说的是“是程序 hang 住这个时间段曾经有切换代理的操“啊

dnf 是 C++的吧? yum 才是 python 的

还没正式发布的 dnf5 才是 c++,yum 是 dnf 的 alias ,都是 python

我觉得你可能混淆了 yum3 和 yum4/dnfyum3 是 python 的; yum4 是指向 C++的 dnf 的 alias

有 ipv6 吗?强制 ipv4 ?

我查了一下资料,发现你说的情况以前确实是存在过的所以我觉得提到 yum 、dnf 的时候确实有必要说一下版本根据维基百科:DNF was originally written in Python, but as of 2016 efforts were under way to port it to C and move most functionality from Python code into the new libdnf library.[12] In 2018, the DNF team announced the decision to move libdnf from C to C++.在 RHEL8 之后,yum4 是 C++的 dnf 的别名;在 RHEL7 时代,yum 是一个纯 python 的东西,那时代 dnf 没有被引入RHEL 应该是没有用过 python 版本的 dnf 吧?

又查了一下,dnf 是纯 Python 的,但 dnf 底层使用的 libdnf 是 c++。看起来我 dnf 卡住的问题和 Python http 请求的问题不是同一个