当前位置: 首页 > 知识库问答 >
问题:

urllib和“ssl:certificate_verify_failed”错误

裴俊雅
2023-03-14
Exception in thread Thread-3:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 810, in        __bootstrap_inner
self.run()
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 763, in  run
self.__target(*self.__args, **self.__kwargs)
File "/Users/Matthew/Desktop/Skypebot 2.0/bot.py", line 271, in process
info = urllib2.urlopen(req).read()
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 154, in urlopen
return opener.open(url, data, timeout)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 431, in open
response = self._open(req, data)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 449, in _open
'_open', req)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 409, in _call_chain
result = func(*args)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1240, in https_open
context=self._context)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1197, in do_open
raise URLError(err)
URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)>
if input.startswith("!web"):
    input = input.replace("!web ", "")      
    url = "https://domainsearch.p.mashape.com/index.php?name=" + input
    req = urllib2.Request(url, headers={ 'X-Mashape-Key': 'XXXXXXXXXXXXXXXXXXXX' })
    info = urllib2.urlopen(req).read()
    Message.Chat.SendMessage ("" + info)

共有1个答案

酆景辉
2023-03-14

如果只想绕过验证,可以创建一个新的SSLContext。默认情况下,新创建的上下文使用CERT_NONE。

如第17.3.7.2.1节所述,对此要小心

直接调用SSLContext构造函数时,CERT_NONE是默认值。由于它不对其他对等体进行身份验证,因此它可能是不安全的,尤其是在客户端模式下,在这种模式下,大多数时间您都希望确保与之对话的服务器的真实性。因此,当处于客户端模式时,强烈建议使用CERT_REQUIRED。

input = input.replace("!web ", "")      
url = "https://domainsearch.p.mashape.com/index.php?name=" + input
req = urllib2.Request(url, headers={ 'X-Mashape-Key': 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' })
gcontext = ssl.SSLContext()  # Only for gangstars
info = urllib2.urlopen(req, context=gcontext).read()
Message.Chat.SendMessage ("" + info)
import ssl

# This restores the same behavior as before.
context = ssl._create_unverified_context()
urllib.urlopen("https://no-valid-cert", context=context)

它还通过monkeypatching提供了一个非常不受欢迎的选项,这在Python中是不常见的:

import ssl

ssl._create_default_https_context = ssl._create_unverified_context

该函数用创建未经验证的上下文的函数重写上下文创建的默认函数。

请按照PEP中的说明注意:

 类似资料:
  • 我得到以下错误: 这是导致此错误的代码: 我使用的API要求我使用HTTPS。我怎样才能让它绕过验证?

  • 问题内容: 我收到以下错误: 这是导致此错误的代码: 我使用的API要求我使用HTTPS。如何使其绕过验证? 问题答案: 如果只想绕过验证,则可以创建一个新的。默认情况下,新创建的上下文使用。 请注意第17.3.7.2.1节中的规定 直接调用构造函数时,默认值为。由于它不对另一个对等方进行身份验证,因此它可能是不安全的,尤其是在客户端模式下,在大多数情况下,你希望确保与之对话的服务器的真实性。因此

  • 问题内容: 我正在尝试使用urllib从ftp普查站点下载一个zip文件(“ tl_2008_01001_edges.zip”)。压缩文件以什么格式保存,如何保存? 我对Python还是很陌生,不了解urllib是如何工作的。 这是我的尝试: 如果我知道ftp文件夹列表(在这种情况下为县),是否可以使用glob函数浏览ftp站点列表? 谢谢。 问题答案: 使用的zip文件数据 和 目录列表。 要使

  • 我正在尝试搜索亚马逊的产品广告,并使用botlenose来帮助我做到这一点。但是,我刚刚收到HTTP错误400。 其他一些重要信息: 我来自巴西,我的标签也来自亚马逊。这是个问题吗? 我确实检查了我的钥匙、秘密和标签,一切正常。我确实在StackOverflow上查看了其他一些问题,但对我来说没有任何效果。 当然,出于安全原因,我更改了密钥。 Traceback(最近一次调用最后一次):File"

  • urllib提供了一系列用于操作URL的功能。 Get urllib的request模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应: 例如,对豆瓣的一个URLhttps://api.douban.com/v2/book/2129650进行抓取,并返回响应: from urllib import request with request.urlope

  • Traceback(最近的最后一次调用):文件"C:/用户/AppData/本地/程序/Python/Python37/client.py",第54行,引号=json.loads(urllib.request.urlopen(QUERY.格式(random.random())). read())文件"C:\用户\AppData\本地\程序\Python\Python37\lib\urllib\re