您的位置:

提示ValueError(f"Invalid proxy scheme for tunneling: {scheme!r}, must be either 'http' or 'https'")的解决方案

  发布时间:2024-12-14 22:36:21
urllib3出现ValueError的原因是代理设置中使用了不支持的代理协议,解决方法是确保代理协议为'http'或'https'。确保代码中设置代理时代理方案正确,避免错误发生。在使用urllib3发送请求时也需传递正确的代理方案。具体例子中展示了正确配置代理的方法。

问题原因

urllib3出现ValueError(f"Invalid proxy scheme for tunneling: {scheme!r}, must be either 'http' or 'https'")的原因是由于在代理设置中使用了不支持的代理协议。urllib3在处理代理服务器时,需要明确指定代理协议为'http'或者'https',如果代理协议不是这两者之一,则会抛出该错误。

解决方案

出现ValueError("Invalid proxy scheme for tunneling: {scheme!r}, must be either 'http' or 'https'")的原因是代理方案(scheme)不合法,urllib3只支持' http'或' https'代理方案用于隧道。解决这个问题的方法是确保设置的代理方案是' http'或' https'。 解决方法: 1. 检查代码中设置代理的地方,确保代理方案的设定是合法的。例如:


import requests
proxies = {
    'http': 'http://your_proxy_ip:your_proxy_port',
    'https': 'https://your_proxy_ip:your_proxy_port'
}
response = requests.get('https://www.example.com', proxies=proxies)
  1. 如果使用urllib3直接发送请求,也需要确保传递的代理方案是正确的。例如:

import urllib3
http = urllib3.ProxyManager('http://your_proxy_ip:your_proxy_port')
r = http.request('GET', 'https://www.example.com')

通过以上两种方法,可以确保代理方案设置正确,避免出现"Invalid proxy scheme for tunneling"的ValueError。

具体例子

当使用urllib3库时,出现ValueError: Invalid proxy scheme for tunneling: {scheme}, must be either 'http' or 'https'错误通常是因为代理服务器的协议方案不正确导致的。要正确使用urllib3避免该错误,需要确保代理服务器的协议方案为httphttps。 解决该问题的方法是在创建urllib3PoolManager时,为其传递一个正确配置的代理。下面是一个示例代码:


import urllib3

# 设置代理信息,注意代理协议必须为 http 或 https
proxy = {
    'http': 'http://your_http_proxy:port',
    'https': 'http://your_https_proxy:port'
}

# 创建带有代理的 PoolManager
http = urllib3.ProxyManager(proxy_url=proxy['http'], proxy_headers=None)
https = urllib3.ProxyManager(proxy_url=proxy['https'], proxy_headers=None)

# 发送请求
response_http = http.request('GET', 'http://example.com')
response_https = https.request('GET', 'https://example.com')

print(response_http.status)
print(response_https.status)

在以上示例中,我们首先定义了proxy字典,它包含了HTTP和HTTPS代理服务器的地址。然后分别创建了带有对应代理的urllib3.ProxyManager对象,分别使用HTTP代理发送HTTP请求和使用HTTPS代理发送HTTPS请求。最后打印出了请求的状态码。 通过上述方法,可以正确使用urllib3库,避免ValueError: Invalid proxy scheme for tunneling错误的发生。