You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu环境下requests无法调用服务获取数据,但浏览器可正常访问

问题描述

我将service与调用它的Python程序均运行在Ubuntu环境下。开发的应用程序会调用该service获取JSON格式的pandas DataFrame数据,该service在返回数据前会将内容打印到控制台。通过浏览器测试service可正常工作,能看到JSON化的数据;但使用Python的requests库调用时,程序无响应,无法获取返回结果。相关代码如下:

def get_RRDf(ticker, date_years_ago, wind):
    print("Entering get_rrDf")

    build_params = "thresh=.20&symbol=" + ticker +"&window=" + str(wind) + "&lookback=5"
    api_url = "http://xx.xx.xx.xx:3000/RR/"+build_params
    print(api_url)

    app_headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0' }

    response = requests.get(api_url, headers=app_headers)
    print("==================")
    print(type(response))
    print(response.text)
    print("==================")

    ...
排查与解决建议
  • 修正URL参数格式:当前代码把查询参数直接拼接在路径后,符合HTTP规范的写法应该是将参数放在?之后,例如http://xx.xx.xx.xx:3000/RR?thresh=.20&symbol=xxx&window=xxx&lookback=5。浏览器可能自动修正了错误格式,但requests不会,service可能因路径解析异常导致阻塞。
  • 添加请求超时限制:在requests.get中加入timeout参数,比如requests.get(api_url, headers=app_headers, timeout=10),避免程序无限等待,同时能捕获超时类错误信息。
  • 检查service运行状态与日志:确认Python发起请求时,service是否接收到请求、是否有报错输出。若service未收到请求,排查Ubuntu防火墙是否拦截3000端口,或确认目标IP/端口是否正确;若收到请求但未返回,排查service处理Python请求时是否出现逻辑阻塞。
  • 对比浏览器与requests的请求头:用浏览器开发者工具(F12)查看请求的完整头信息,与代码中的app_headers对比,确认是否遗漏Accept等关键头字段,部分service会校验此类字段。
  • 用curl工具测试:在Ubuntu终端执行curl -v "你的完整API地址",验证是否能正常获取响应。若curl同样无响应,问题出在service或网络层面;若curl正常,再聚焦排查requests代码的细节问题。
  • 更新requests库版本:旧版本requests可能存在兼容性问题,执行pip install --upgrade requests更新至最新版本后重试。

内容的提问来源于stack exchange,提问作者Ivan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 17:53:18