Python中requests库必须通过Charles代理才能访问网络,如何解决?

之前 python 使用 requests 访问网站,抓包一直都挺正常的

但现在却不行了

要想使用 requests,必须走 charles 的代理才行

如果 关掉 charles 或者 取消勾选 charles proxy 设置项里的 macOS proxy,requests.get/post 就陷入假死状态。

卸载了 charles,删除了所有的 charles 配置 ,重置了无线网络,开关机 N 次 都无法解决。

推测是 charles 接管了 mac 的 sockes 代理? 现在毫无头绪, 请教大佬。
Python中requests库必须通过Charles代理才能访问网络,如何解决?


25 回复

终端里 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_PROXYHTTPS_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 了,没有效

curl -v ip.sg 结果看看


~ 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 设置了默认代理

你是不是路由器上开了什么“安全防护”之类的功能……关掉应该就好了?

回到顶部