如何在Python中调用speedtest.Speedtest()时启用--secure参数?
解决speedtest.py二次运行出现403 Forbidden的问题
问题重现
原Python脚本:
import speedtest # Speedtest test = speedtest.Speedtest() # <--- line 4 test.get_servers() best = test.get_best_server() print(f"Found: {best['host']} located in {best['country']}")
首次运行输出正常:
Found: speedtest.witcom.cloud:8080 located in Germany
但第二次及后续运行会抛出错误:
Traceback (most recent call last): File "/Users/zeth/Code/pinger/pinger.py", line 4, in <module> test = speedtest.Speedtest() File "/usr/local/lib/python3.9/site-packages/speedtest.py", line 1095, in __init__ self.get_config() File "/usr/local/lib/python3.9/site-packages/speedtest.py", line 1127, in get_config raise ConfigRetrievalError(e) speedtest.ConfigRetrievalError: HTTP Error 403: Forbidden
命令行执行speedtest-cli也会报同样错误,但添加--secure参数后(speedtest-cli --secure)可正常运行。尝试手动信任证书,但因Brew安装的Python3.9找不到对应路径,无法解决。
解决方案
在初始化Speedtest实例时,传入secure=True参数,强制使用HTTPS请求,对应命令行的--secure选项:
修改后的代码:
import speedtest # Speedtest test = speedtest.Speedtest(secure=True) # 启用HTTPS test.get_servers() best = test.get_best_server() print(f"Found: {best['host']} located in {best['country']}")
这样就能避免后续运行时的403错误,和命令行使用--secure的效果一致。
内容的提问来源于stack exchange,提问作者Zeth
相关产品推荐
相关产品推荐

