Python发送HTTPS请求遇socket.gaierror[Errno11004],公司防火墙下需代理吗?
解决公司防火墙下requests请求的getaddrinfo失败问题
没错,你猜的完全正确——在公司防火墙环境里,这个报错几乎肯定是因为防火墙拦截了你的外部网络请求,必须配置代理才能让requests库正常访问GitHub这类外部网站。
下面给你两种常用的代理配置方法,按需选择:
1. 单次请求添加代理参数
直接在get请求里传入proxies参数,适合临时或者个别请求使用:
import requests # 替换成你公司实际的代理地址和端口(比如http://proxy.company.com:8080) proxies = { 'http': 'http://your-company-proxy:port', 'https': 'http://your-company-proxy:port' } try: response = requests.get('https://github.com', proxies=proxies) print(f"请求成功,状态码:{response.status_code}") except Exception as e: print(f"请求失败:{e}")
如果你的公司代理需要用户名和密码验证,把参数改成这样:
proxies = { 'http': 'http://username:password@your-company-proxy:port', 'https': 'http://username:password@your-company-proxy:port' }
2. 全局代理配置(推荐)
如果需要频繁发起外部请求,可以配置全局代理,不用每次都重复写参数:
方法一:使用requests.Session
创建一个会话对象,设置代理后所有通过该会话的请求都会自动使用代理:
import requests # 创建会话并配置代理 session = requests.Session() session.proxies = { 'http': 'http://your-company-proxy:port', 'https': 'http://your-company-proxy:port' } # 后续请求直接用session response = session.get('https://github.com') print(response.status_code)
方法二:设置系统环境变量
通过设置环境变量让requests自动读取代理配置,适合不想修改代码的场景:
- Windows(命令提示符):
set HTTP_PROXY=http://your-company-proxy:port set HTTPS_PROXY=http://your-company-proxy:port
- Linux/macOS(终端):
export HTTP_PROXY=http://your-company-proxy:port export HTTPS_PROXY=http://your-company-proxy:port
额外提示
如果配置后还是报错,先确认这几点:
- 代理地址、端口是否正确(可以问问公司IT部门,或者查看浏览器的代理设置)
- 代理是否需要验证,用户名密码是否正确
- 尝试用浏览器配置相同代理访问GitHub,确认代理本身能正常连接外部网络
内容的提问来源于stack exchange,提问作者Noggi
相关产品推荐
相关产品推荐

