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验证可能会使您的应用程序容易受到中间人攻击。因此,请谨慎使用此方法,并仅在您完全信任目标网站时使用。


Comments | NOTHING