在PythonAnywhere中使用requests库遇ProxyError问题的求助
解决requests访问CNN时的ProxyError问题
Hey Jerry,从你的描述来看,你的环境已经自动配置了代理http://proxy.server:3128,但这个代理无法正常连接到CNN服务器,导致了Max retries exceeded的错误。下面给你几个可行的解决思路:
1. 验证并手动配置代理(如果代理是必需的)
如果这个代理是你必须使用的(比如公司内网要求),先确认代理的地址、端口是否正确,以及该代理是否允许访问外部网站(比如CNN)。确认无误后,可以手动在requests请求中指定代理:
import requests # 配置HTTP和HTTPS代理 proxies = { 'http': 'http://proxy.server:3128', 'https': 'http://proxy.server:3128' } url = 'https://www.cnn.com/' try: response = requests.get(url, proxies=proxies) response.raise_for_status() # 主动抛出HTTP错误 print("请求成功!") except requests.exceptions.ProxyError as e: print(f"代理连接失败:{str(e)}")
如果代理需要身份验证,把代理地址改成http://用户名:密码@proxy.server:3128即可。
2. 强制跳过代理(如果代理不需要)
如果这个代理是系统自动配置的,但你当前的网络环境不需要它(比如个人家用网络),可以直接让requests忽略代理:
import requests url = 'https://www.cnn.com/' # 通过proxies参数禁用代理 response = requests.get(url, proxies={'http': None, 'https': None})
或者你也可以在代码开头清除环境变量中的代理设置:
import os import requests # 移除环境中的代理变量 os.environ.pop('http_proxy', None) os.environ.pop('https_proxy', None) url = 'https://www.cnn.com/' response = requests.get(url)
3. 排查网络环境问题
如果上面的方法都没用,建议先检查:
- 用浏览器直接访问CNN,看看是否能正常打开(排除目标网站本身的访问问题)
- 测试代理服务器是否可用,比如用curl命令测试:
curl -x http://proxy.server:3128 https://www.cnn.com - 确认你的网络是否有防火墙或其他限制,阻止了对CNN或代理服务器的访问
内容的提问来源于stack exchange,提问作者jerry
相关产品推荐
相关产品推荐

