urllib.error.URLError urllib.error的处理办法

本文介绍了在使用Python发起HTTPS请求时遇到证书验证失败错误的原因及解决方案。通过禁用SSL证书验证,可以避免因自签名证书导致的URLError。

       在使用python发起urlopen的时候会经常出现:
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777)>
类型的错误

 

可能原因分析:

Python 2.7.9 之后引入了一个新特性
当你urllib.urlopen一个 https 的时候会验证一次 SSL 证书 
当目标使用的是自签名的证书时就会爆出一个 
urllib2.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)> 的错误消息

处理办法如下:

在自己的py文件里面加入以下代码即可完美解决
import ssl

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

 

如果你和我有共同爱好,我们可以加个好友一起交流!

### 代码功能概述 `import re` 用于导入 Python 的正则表达式模块,该模块提供了一系列用于处理字符串模式匹配和替换的函数。`import urllib.error` 导入 `urllib` 库中处理错误的模块,它包含了在使用 `urllib` 进行网络请求时可能出现的各种异常类。`import urllib.request` 导入 `urllib` 库中用于发起网络请求的模块,可用来打开和读取 URL。 ### 可能存在的问题及解决办法 #### 1. 模块未安装问题 在 Python 标准库中,`re` 和 `urllib` 是内置模块,通常情况下无需额外安装。但如果 Python 环境出现问题,可能会找不到这些模块。可以通过检查 Python 版本和环境来解决。 ```python import sys print(sys.version) # 检查 Python 版本 ``` #### 2. 语法错误 代码中没有明显的语法错误,但如果在后续使用这些模块时,可能会出现语法错误。例如,使用 `re` 模块时,正则表达式的语法不正确。 ```python import re # 错误示例:正则表达式语法错误 # pattern = r'[a-z+' # 正确示例 pattern = r'[a-z]+' text = 'abc123' result = re.findall(pattern, text) print(result) ``` #### 3. 网络请求异常 使用 `urllib.request` 发起网络请求时,可能会遇到各种异常,如 `urllib.error.URLError`、`urllib.error.HTTPError` 等。可以使用 `try-except` 语句来捕获并处理这些异常。 ```python import urllib.error import urllib.request try: response = urllib.request.urlopen('http://www.nonexistentwebsite.com') print(response.read().decode('utf-8')) except urllib.error.URLError as e: print(f"URL Error: {e}") except urllib.error.HTTPError as e: print(f"HTTP Error: {e.code} {e.reason}") ``` ### 使用指导 #### `re` 模块 `re` 模块主要用于字符串的模式匹配和替换。以下是一个简单的示例,用于从文本中提取所有的电子邮件地址。 ```python import re text = "Contact us at info@example.com or support@example.org" pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b' emails = re.findall(pattern, text) print(emails) ``` #### `urllib.request` 模块 `urllib.request` 模块可用于发起 HTTP 请求。以下是一个简单的示例,用于获取网页内容。 ```python import urllib.request try: response = urllib.request.urlopen('http://www.baidu.com') html = response.read().decode('utf-8') print(html) except urllib.error.URLError as e: print(f"URL Error: {e}") except urllib.error.HTTPError as e: print(f"HTTP Error: {e.code} {e.reason}") ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值