Windows10下如何通过CMD或Python设置代理?已尝试方案无效求助
Windows10下CMD/Python设置代理未生效的解决办法
问题原因
你用netsh winhttp set proxy设置的是WinHTTP接口的代理,这个仅对使用WinHTTP的系统服务、特定程序生效,而浏览器(依赖WinINET接口)、requests默认(读取系统WinINET代理)都不会读取这个设置,所以才会出现设置后IP无变化的情况。
解决方法
1. 让浏览器/系统全局代理生效
要让浏览器等依赖系统代理的程序生效,需要设置WinINET的系统代理,可通过CMD修改注册表实现:
# 开启并设置代理 reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1 /f reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /t REG_SZ /d "proxy-ip:proxy-port" /f # 取消代理(按需使用) reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f
注意:修改后需要重启浏览器才能生效。
2. 让Python的requests生效
有三种方式可选:
方式一:单个请求指定代理
直接在请求时传入代理参数,适合临时使用:
import requests proxies = { 'http': 'http://proxy-ip:proxy-port', 'https': 'http://proxy-ip:proxy-port' } response = requests.get("https://ipinfo.io/", proxies=proxies) print(response.text)
方式二:设置环境变量全局生效
对当前Python进程内的所有requests请求生效:
import os import requests os.environ['HTTP_PROXY'] = 'http://proxy-ip:proxy-port' os.environ['HTTPS_PROXY'] = 'http://proxy-ip:proxy-port' response = requests.get("https://ipinfo.io/") print(response.text)
方式三:读取系统代理(需requests支持)
requests默认会读取系统的WinINET代理(即上面设置的系统全局代理),只要系统代理设置正确,无需额外代码即可生效。
额外注意事项
- 如果代理需要用户名密码认证,代理地址格式为:
http://username:password@proxy-ip:proxy-port - 设置后可通过访问
https://ipinfo.io(浏览器或Python请求)验证IP是否切换为代理IP
内容的提问来源于stack exchange,提问作者Eren
相关产品推荐
相关产品推荐

