Python中requests库必须通过Charles代理才能访问网络,如何解决?
之前 python 使用 requests 访问网站,抓包一直都挺正常的
但现在却不行了
要想使用 requests,必须走 charles 的代理才行
如果 关掉 charles 或者 取消勾选 charles proxy 设置项里的 macOS proxy,requests.get/post 就陷入假死状态。
卸载了 charles,删除了所有的 charles 配置 ,重置了无线网络,开关机 N 次 都无法解决。
推测是 charles 接管了 mac 的 sockes 代理? 现在毫无头绪, 请教大佬。
Python中requests库必须通过Charles代理才能访问网络,如何解决?
终端里 http_proxy 没改?
这问题我遇到过。requests库默认走系统代理,如果Charles没开或者配置不对,就会连不上网。
最简单的解决方法是临时关闭代理设置:
import requests
# 方法1:直接关闭会话代理
session = requests.Session()
session.trust_env = False # 关键!不读取系统代理设置
response = session.get('https://api.example.com')
# 方法2:requests请求时明确指定proxies为空
response = requests.get(
'https://api.example.com',
proxies={'http': None, 'https': None},
timeout=10
)
如果只是想调试时用Charles,平时不用,可以这样动态切换:
import requests
import os
def make_request(use_proxy=False):
if use_proxy:
# Charles默认端口8888
proxies = {
'http': 'http://127.0.0.1:8888',
'https': 'http://127.0.0.1:8888'
}
else:
proxies = None
response = requests.get(
'https://api.example.com',
proxies=proxies,
verify=False # 如果Charles用了自签名证书需要这个
)
return response
检查下你的环境变量,有时候是HTTP_PROXY或HTTPS_PROXY设了Charles地址。在终端里执行echo $HTTP_PROXY看看。
总结:关掉系统代理设置或者明确指定proxies参数就行。
wireshark 抓包分析
配置文件里没找到有更改的痕迹,终端平时都是直接复制这两条语句来使用 socks 代理 export http_proxy=socks5://127.0.0.1:1080
export https_proxy=socks5://127.0.0.1:1080 但现在也不行了,export 后,使用 curl ip.sg 命令后,报错:curl: (7) Failed to receive SOCKS5 connect request ack.
没用过 wireshark,我研究一下
unset http_proxy
unset https_proxy
去 Activity Monitor 看下;
如果不卸载,重启是不管用的,这个之前我也遇到过;卸载了就不知道了
因为你设置了代理,你在哪设置的取消就可以了
requests 的参数里写了 proxies 吗
首先,你 Chrome 访问 baidu.com, 如果可以,那说明不是 Charles 接管了 PC 的网络出口;
然后,你改用 urllib 或者 requests_html 访问网页,如果能访问到,更说明不是 Charles 的问题;
最后,信任证书添加了吗? 你再去看一下。
比较菜,不知道说的对不对
如果是 win10,检查设置-网络-代理 里面的设置,
如果是 mac,可能也有类似的网络设置
http_proxy 吧
unset 了,没有效
~ unset http_proxy
➜ ~ unset https_proxy
➜ ~ curl -v ip 点 sg
* Rebuilt URL to: ip 点 sg/
* Could not resolve host: ip 点 sg
* Closing connection 0
curl: (6) Could not resolve host: ip 点 sg
回复的时候系统提示不能包含外链,所有.用中文代替了
➜ ~ export http_proxy=socks5://127.0.0.1:1080
➜ ~ curl -v ip 点 sg
* Rebuilt URL to: ip 点 sg/
* Trying 127.0.0.1…
* TCP_NODELAY set
* SOCKS5 communication to ip 点 sg:80
* Could not resolve host: ip 点 sg
* Closing connection 0
curl: (6) Could not resolve host: ip 点 sg
卸载了,能搜索 到店 charles 文件也删除了,重装后也没有以前的配置的,但问题还是一样
证书没有问题,抓包也正常,问题就是 要使用必须要开启抓包功能,一旦关闭 charles,或者勾掉 代理 mac 的流量,就没办法使用
你这个访问的是什么域名啊?换一下百度的域名试一试能访问吗
看系统设置 网络 代理
想黑华为!作为狗子的我第一个不愿意!
解决了就好
同 10 楼,20 楼,原先我也只能用代理爬,win10, 系统那里代理设置关闭,然后刷新了下 dns, 重启网络设置,ok,注意是否 requests 设置了默认代理
你是不是路由器上开了什么“安全防护”之类的功能……关掉应该就好了?


