鱼C论坛

 找回密码
 立即注册
查看: 1461|回复: 4

urllib 问题

[复制链接]
发表于 2023-8-18 18:04:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import urllib.request
import 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模块,为什么还会报错,请大神帮忙更正
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-18 18:04:48 | 显示全部楼层
您好!根据您提供的代码,您导入了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)

这样,您的代码应该能够正常运行而不会报错了。

希望能帮到您!如果您还有其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-18 18:05:14 | 显示全部楼层
根据你提供的代码,你希望通过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_hostnameverify_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_hostnameFalse以禁用主机名检查,将verify_mode设置为ssl.CERT_NONE以禁用证书验证。

这样,你就可以成功地发送HTTPS请求并获取响应了。

希望能解决你的问题!如果还有其他疑问,请随时提问。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-18 18:05:21 | 显示全部楼层
问题分析:
你在使用urllib库发送HTTPS请求时,导入了ssl模块并调用了ssl._create_default_https_context = ssl._create_unverified_context()来取消验证SSL证书。然而,你仍然遇到了报错。

解决方案:
报错可能是因为在取消验证SSL证书之后,未正确地设置到urllib中。你需要将自定义的SSL上下文应用于urllib的请求中。

下面是修改后的代码,请参考:
import urllib.requestimport sslurl = "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请求。如果问题仍然存在,请提供更详细的错误信息,以便我能够进一步帮助你解决问题。

如果回答对你有帮助,请给我一个最佳答案!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-18 18:08:50 | 显示全部楼层
本帖最后由 isdkz 于 2023-8-18 18:09 编辑

这里是不需要括号的

错误的写法:
ssl._create_default_https_context = ssl._create_unverified_context()

正确的写法:
ssl._create_default_https_context = ssl._create_unverified_context

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 08:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表