Python执行带HTTP Basic认证的API请求时遇连接错误求助
解决Python请求IGN GCMS API时的连接超时错误(WinError 10060)
你遇到的WinError 10060是典型的网络连接超时/主机无响应问题,以下是具体排查和解决步骤:
1. 先确认API地址的可达性
直接用浏览器访问目标URL(带上参数?departement=65),或者用curl命令测试:
curl -u 你的用户名:你的密码 https://espacecollaboratif.ign.fr/gcms/api/reports?departement=65
如果浏览器/curl也无法访问,说明问题出在网络环境或API地址本身(比如地址写错、服务器维护、IP被拦截)。
2. 检查网络限制
- 代理问题:如果是公司内网环境,大概率需要配置代理。在requests中添加代理参数:
proxies = { 'https': 'http://你的代理地址:端口' } # 在请求中加入proxies参数 req = requests.get(url, auth=(username, password), params={"departement": "65"}, proxies=proxies) - 防火墙/杀毒软件拦截:临时关闭本地防火墙或杀毒软件,测试是否能正常连接。
3. 修正请求参数格式
原代码中params传的是字符串"departement=65",虽然requests兼容,但更规范的方式是传字典,避免潜在的格式解析问题:
params={"departement": "65"}
4. 增加超时与异常处理
给请求添加timeout参数避免无限等待,同时用try-except捕获异常,便于排查:
import requests username = 'XXXX' password = 'XXXX' url = 'https://espacecollaboratif.ign.fr/gcms/api/reports' try: req = requests.get( url, auth=(username, password), # 简化写法,和HTTPBasicAuth效果一致 params={"departement": "65"}, timeout=10 # 10秒超时 ) req.raise_for_status() # 主动抛出HTTP错误(比如401、404) contenu = req.json() print(contenu) except requests.exceptions.RequestException as e: print(f"请求失败: {str(e)}")
5. 验证认证方式
虽然文档说明是HTTP Basic认证,但可以确认:
- 用户名和密码是否正确(注意大小写、特殊字符)
- 是否需要额外的请求头(比如
User-Agent模拟浏览器):headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' } req = requests.get(url, auth=(username, password), params={"departement": "65"}, headers=headers)
6. 检查API服务状态
如果以上都没问题,可能是对方服务器临时故障,等待一段时间后再测试,或者查看官方的服务通知。
内容的提问来源于stack exchange,提问作者vince
相关产品推荐
相关产品推荐

