关于python的http.client和urllib库跳过ssl验证的方法


http.client

在Python 3.10中,可以使用http.client模块中的HTTPSConnection类来发送HTTPS请求,并通过设置SSLContext对象来跳过SSL验证。

以下是一个示例代码,演示如何使用http.client模块发送HTTPS请求并跳过SSL验证:

import http.client
import ssl

# 创建SSLContext对象
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)

# 跳过SSL验证
context.check_hostname = False
context.verify_mode = ssl.CERT_NONE

### 请注意上面的跳过方法,可能会导致python获取到的数据报类型错误。建议采用下面的方法
content = ssl._create_unverified_context()

# 创建自定义的HTTPSConnection对象
conn = http.client.HTTPSConnection('https://example.com', context=context)

# 发送请求
conn.request('GET', '/')

# 获取响应
response = conn.getresponse()

# 读取响应内容
data = response.read()

# 处理响应数据...

在上面的代码中,我们首先创建了一个SSLContext对象,并使用ssl.PROTOCOL_TLSv1_2作为协议版本。然后,我们将check_hostname属性设置为False,以跳过主机名验证。同时,我们将verify_mode属性设置为ssl.CERT_NONE,以跳过证书验证。

接下来,我们创建了一个自定义的HTTPSConnection对象,并将自定义的SSLContext对象作为参数传递给它。然后,我们使用request()方法发送一个GET请求到指定的URL。最后,我们使用getresponse()方法获取响应,并读取响应内容。

urllib

看起来您正在尝试使用urllib.request中的OpenerDirector对象来发送请求,但遇到了一个TypeError,提示需要一个字符串或类似字节的对象。

在Python 3.10中,urlopen()方法已被弃用,并被urlopen()函数替代。因此,您应该使用urlopen()函数而不是OpenerDirector对象来发送请求。

下面是一个使用urlopen()函数发送请求的示例代码:

import urllib.request
import ssl

# 创建SSLContext对象
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)

# 跳过SSL验证
context.check_hostname = False
context.verify_mode = ssl.CERT_NONE

### 请注意上面的跳过方法,可能会导致python获取到的数据报类型错误。建议采用下面的方法
content = ssl._create_unverified_context()

# 使用自定义的SSLContext对象来发送请求
response = urllib.request.urlopen('https://example.com', context=context)

# 读取响应内容并打印输出
print(response.read().decode('utf-8'))

在上面的代码中,我们使用urlopen()函数发送请求,并将自定义的SSLContext对象作为参数传递给它。然后,我们读取响应内容并打印输出。

请注意,使用这种方法跳过SSL验证可能会使您的应用程序容易受到中间人攻击。因此,请谨慎使用此方法,并仅在您完全信任目标网站时使用。

声明:一代明君的小屋|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 关于python的http.client和urllib库跳过ssl验证的方法


欢迎来到我的小屋