PythonAnywhere普通用户解决Python HTTPS请求SSL证书验证失败问题
解决PythonAnywhere无root权限下SSL证书验证失败问题
方法1:直接在HTTPSConnection中指定证书文件
http.client的HTTPSConnection类支持通过ca_certs参数指定自定义CA证书文件,只需传入你已下载的mycertfile.pem的绝对路径(必须是你用户目录下的路径,比如/home/你的用户名/mycertfile.pem):
import http.client # 替换为你实际的证书文件路径 cert_path = "/home/你的用户名/mycertfile.pem" conn = http.client.HTTPSConnection( "www.tesourodireto.com.br", ca_certs=cert_path ) conn.request("GET", "/json/br/com/b3/tesourodireto/service/api/treasurybondsinfo.json") # 获取并处理响应 response = conn.getresponse() data = response.read().decode() print(data) conn.close()
方法2:通过环境变量指定全局自定义CA证书
Python的SSL模块会读取SSL_CERT_FILE环境变量作为CA证书来源,你可以在脚本内或运行脚本前设置该变量:
脚本内设置
import os # 设置为你的证书文件绝对路径 os.environ["SSL_CERT_FILE"] = "/home/你的用户名/mycertfile.pem" # 之后正常使用http.client import http.client conn = http.client.HTTPSConnection("www.tesourodireto.com.br") conn.request("GET", "/json/br/com/b3/tesourodireto/service/api/treasurybondsinfo.json") # 处理响应 response = conn.getresponse() print(response.read().decode()) conn.close()
控制台运行前设置
在PythonAnywhere的bash控制台中先设置环境变量再运行脚本:
export SSL_CERT_FILE=/home/你的用户名/mycertfile.pem python3 your_script_name.py
方法3:使用requests库指定证书(推荐)
如果可以安装第三方库,PythonAnywhere普通用户可以用pip install --user requests安装requests库,它的get方法支持通过verify参数指定证书文件:
import requests url = "https://www.tesourodireto.com.br/json/br/com/b3/tesourodireto/service/api/treasurybondsinfo.json" cert_path = "/home/你的用户名/mycertfile.pem" response = requests.get(url, verify=cert_path) # 直接解析JSON响应 print(response.json())
注意:所有方法中的证书路径必须是你用户目录下的绝对路径,不能使用系统目录(无权限访问)。
内容的提问来源于stack exchange,提问作者Marcos Cesar da Silva
相关产品推荐
相关产品推荐

