urllib 问题
import urllib.requestimport ssl
url = "https: //dict.youdao.com/webtranslate"
ssl._create_default_https_context = ssl._create_unverified_context()
req = urllib.request.Request(url)
d = urllib.request.urlopen(req)
导入了ssl模块,为什么还会报错,请大神帮忙更正
您好!根据您提供的代码,您导入了ssl模块并尝试创建一个未经验证的SSL上下文。然而,您可能遇到了一个常见的错误。
在Python 3中,urllib库默认使用了验证SSL证书的上下文。因此,您不需要手动创建未经验证的上下文。
要解决这个问题,您只需要删除以下这行代码:
ssl._create_default_https_context = ssl._create_unverified_context()
然后,您的代码应该像这样:
import urllib.request
url = "https: //dict.youdao.com/webtranslate"
req = urllib.request.Request(url)
d = urllib.request.urlopen(req)
这样,您的代码应该能够正常运行而不会报错了。
希望能帮到您!如果您还有其他问题,请随时提问。 根据你提供的代码,你希望通过urllib.request模块发送一个HTTPS请求。在Python 3中,默认情况下,urllib.request会验证SSL证书。但是,你可以通过设置上下文(context)来创建一个不验证SSL证书的HTTPS请求。
在你的代码中,你尝试通过设置ssl._create_default_https_context来创建一个不验证SSL证书的上下文。然而,由于你导入的ssl模块并不具备_create_default_https_context属性,所以会报错。
为了创建一个不验证SSL证书的上下文,你可以使用ssl.create_default_context()方法,并设置check_hostname和verify_mode参数。以下是修正后的代码:
import urllib.request
import ssl
url = "https://dict.youdao.com/webtranslate"
context = ssl.create_default_context()
context.check_hostname = False
context.verify_mode = ssl.CERT_NONE
req = urllib.request.Request(url)
d = urllib.request.urlopen(req, context=context)
修正后的代码中,我们使用ssl.create_default_context()创建了一个默认的SSL上下文对象。然后,我们设置check_hostname为False以禁用主机名检查,将verify_mode设置为ssl.CERT_NONE以禁用证书验证。
这样,你就可以成功地发送HTTPS请求并获取响应了。
希望能解决你的问题!如果还有其他疑问,请随时提问。
如果问题已经解决,请设置最佳答案 问题分析:
你在使用urllib库发送HTTPS请求时,导入了ssl模块并调用了ssl._create_default_https_context = ssl._create_unverified_context()来取消验证SSL证书。然而,你仍然遇到了报错。
解决方案:
报错可能是因为在取消验证SSL证书之后,未正确地设置到urllib中。你需要将自定义的SSL上下文应用于urllib的请求中。
下面是修改后的代码,请参考:
import urllib.request
import ssl
url = "https://dict.youdao.com/webtranslate"
context = ssl._create_unverified_context()
req = urllib.request.Request(url)
d = urllib.request.urlopen(req, context=context)
在这个修改后的代码中,我创建了一个自定义的SSL上下文context,并将其传递给urlopen()函数的context参数。这样就可以确保SSL上下文被正确应用于HTTPS请求,从而取消SSL证书验证。
请尝试运行修改后的代码,查看是否能够成功发送HTTPS请求。如果问题仍然存在,请提供更详细的错误信息,以便我能够进一步帮助你解决问题。
如果回答对你有帮助,请给我一个最佳答案!{:10_254:}{:10_254:}{:10_254:}
本帖最后由 isdkz 于 2023-8-18 18:09 编辑
这里是不需要括号的
错误的写法:
ssl._create_default_https_context = ssl._create_unverified_context()
正确的写法:
ssl._create_default_https_context = ssl._create_unverified_context
页:
[1]