Python Requests请求出现504 Gateway Time-out问题求助
问题分析与解决办法
可能原因及对应解决方案
1. 未设置请求超时,触发网关超时限制
当前requests.post调用未设置超时时间,脚本会一直等待目标API响应,最终触发网关的504超时。
修改test.py中的POST请求代码,添加超时参数:
# 替换原POST请求行 p = s.post(post_url, data=post_data, headers=headers, timeout=10) # 超时时间可根据实际场景调整
2. 全局会话对象导致连接异常
全局的requests.Session()对象长期运行后,连接池中的连接可能失效,无法正常发送请求。
将会话对象移到函数内部创建,避免长期持有无效连接:
def work_request(response_id): # 在函数内创建会话 s = requests.Session() # 后续日志、请求逻辑保持不变...
3. 认证令牌失效或API端处理异常
虽然日志ID正常,但令牌Bearer gjhnjkfhsdafkanfjkadnjk可能已过期,导致API端处理缓慢或拒绝请求,间接引发超时。
- 验证令牌有效性,替换为新的有效令牌
- 添加异常捕获,打印详细错误信息定位问题:
try: p = s.post(post_url, data=post_data, headers=headers, timeout=10) p.raise_for_status() # 主动抛出HTTP错误 print(p.text) except requests.exceptions.RequestException as e: print(f"请求错误: {str(e)}") logging.error(f"请求错误: {str(e)}")
4. CGI脚本执行超时限制
服务器的CGI执行时间配置过短,脚本还未完成API请求就被终止,返回504。
- 检查服务器(如Apache/Nginx)的CGI超时配置,延长允许的执行时间
- 考虑将API请求逻辑改为异步处理(如用消息队列),避免CGI同步等待响应
5. 目标API端点或路由异常
虽然网络连通性正常,但API端点https://api.animose/devb/io可能路径变更,或中间路由出现延迟。
直接在服务器上用curl测试API端点,确认是否能快速响应:
curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer gjhnjkfhsdafkanfjkadnjk" -d '{"work": {"id": "TK-TEST231V3NK", "link": "https://api.animose/", "source": "animose"}}' https://api.animose/devb/io
如果curl也超时,说明问题在API端或网络路由,联系API服务商排查;如果curl正常,再回到脚本排查代码逻辑。
内容的提问来源于stack exchange,提问作者Ben David
相关产品推荐
相关产品推荐

