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

Python requests.get()返回空结果:Jenkins插件API调用问题排查

为什么用requests.get调用Jenkins插件API返回空响应,改用Session却能正常工作?

咱们直接说核心问题:你最初的代码根本没机会获取到JSON响应,问题出在return语句的顺序错误,和Session的使用其实没有直接关联——不过改用Session的过程帮你修正了代码结构,才让结果正常显示。

原代码的致命错误

先看你最初的代码:

import requests
def get_deps():
    url = "https://plugins.jenkins.io/api/plugin/CFLint"
    headers = { "Connection": "keep-alive", "Accept": "*/*", "Accept-Encoding": "gzip, deflate, br" }
    reqs = requests.get(url, headers)
    return reqs.status_code  # 这行直接终止了函数!
    return reqs.json()  # 这行代码永远不会被执行
get_deps()

这里有两个问题:

  1. 提前return终止函数:函数执行到return reqs.status_code就会立刻结束,后面的return reqs.json()完全没机会运行。所以你调用get_deps()时,得到的只是HTTP状态码,根本没去读取API返回的JSON数据——这就是你觉得“返回空响应”的本质原因。
  2. headers参数传递错误:requests.get(url, headers)的写法不对,headers需要用headers=headers关键字参数传递,否则会被当成params(URL参数)处理,导致请求头设置无效。不过这不是你拿不到JSON的主要原因,主要还是return顺序的问题。

修改后的代码为什么能正常工作?

再看你修改后的代码:

s = requests.Session()
def get_deps():
    url = "https://plugins.jenkins.io/api/plugin/CFLint"
    reqs = s.get(url)
    res = reqs.json()
    print(res)
get_deps()

这里的关键改进是:

  • 你去掉了提前终止的return reqs.status_code,正确地调用reqs.json()解析响应并打印结果,这才是能拿到数据的核心原因。
  • 改用requests.Session()的作用是维持会话(比如自动保持cookie、复用连接),但在这个场景里,不用Session直接用普通的requests.get()也能正常工作,只要修正return顺序和headers传递方式。比如修正后的普通写法:
import requests
def get_deps():
    url = "https://plugins.jenkins.io/api/plugin/CFLint"
    headers = { "Connection": "keep-alive", "Accept": "*/*", "Accept-Encoding": "gzip, deflate, br" }
    reqs = requests.get(url, headers=headers)  # 显式指定headers参数
    return reqs.json()  # 正确的return位置
print(get_deps())

你之前在Postman能正常获取,是因为Postman的请求参数和头都正确,而且没有提前终止的逻辑。

总结最初出错的原因

最初问题的根源就是函数内的return语句顺序错误,提前返回状态码导致后续读取JSON的代码无法执行。改用Session的过程中你重构了代码,去掉了错误的return,所以能正常拿到响应。另外原代码中headers参数的传递方式也有误,需要用关键字参数显式指定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 13:12:53