我在用
import requests
requests.post(url='https://foo.example', data={'bar':'baz'})
但是我得到一个request。exceptions。sslerror。 网站的证书过期了,但我没有发送敏感数据,所以这对我来说无关紧要。 我可以想象有一个像“verify =False”这样的参数,我可以使用,但我似乎找不到它。
我在用
import requests
requests.post(url='https://foo.example', data={'bar':'baz'})
但是我得到一个request。exceptions。sslerror。 网站的证书过期了,但我没有发送敏感数据,所以这对我来说无关紧要。 我可以想象有一个像“verify =False”这样的参数,我可以使用,但我似乎找不到它。
当前回答
在请求方法上使用requests.packages.urllib3.disable_warnings()和verify=False。
import requests
from urllib3.exceptions import InsecureRequestWarning
# Suppress only the single warning from urllib3 needed.
requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning)
# Set `verify=False` on `requests.post`.
requests.post(url='https://example.com', data={'bar':'baz'}, verify=False)
其他回答
在请求方法上使用requests.packages.urllib3.disable_warnings()和verify=False。
import requests
from urllib3.exceptions import InsecureRequestWarning
# Suppress only the single warning from urllib3 needed.
requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning)
# Set `verify=False` on `requests.post`.
requests.post(url='https://example.com', data={'bar':'baz'}, verify=False)
要添加到Blender的答案中,您可以使用Session禁用所有请求的SSL证书验证。verify = False
import requests
session = requests.Session()
session.verify = False
session.post(url='https://example.com', data={'bar':'baz'})
请注意urllib3(请求使用的)强烈不鼓励发出未经验证的HTTPS请求,并将引发InsecureRequestWarning。
也可以使用环境变量:
export CURL_CA_BUNDLE=""
首先导入SSL,然后在python脚本文件中用三行代码创建一个这样的变量-
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
我用beautifulsoup在html解析中使用的一个例子是这样的-
import urllib.request,urllib.parse,urllib.error
from bs4 import BeautifulSoup
import ssl
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
url = input('Enter - ')
html = urllib.request.urlopen(url, context=ctx).read()
soup = BeautifulSoup(html, 'html.parser')
如果你正在编写一个scraper并且真的不关心SSL证书,你可以将其设置为全局:
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
不用于生产
编辑,评论来自@Misty
不工作。Requests现在使用urllib3,它创建自己的urllib3 SSLContext。您可以重写cert_reqs
ssl.SSLContext.verify_mode = property(lambda self: ssl.CERT_NONE, lambda self, newval: None)