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

Python使用http.client判断GET请求响应体是否为空的方法咨询

使用http.client判断响应体是否为空的正确姿势

首先得指出你之前两种写法的问题:

  • 第一种里**两次调用conn.getresponse()**是错误的,每个HTTP连接只能获取一次响应对象,第二次调用会触发异常或获取无效响应;而且length属性并不靠谱——如果响应没有返回Content-Length头,这个值会是-1,直接判断<1会把有效响应误判为空。
  • 第二种里**两次调用read()**也有问题,响应体是流式数据,第一次read()已经把所有内容读取完毕,第二次read()只会返回空的b'',哪怕原本有有效内容,也会导致后续json.loads报错。

然后回答你的核心疑问:b'{}'不会被视为空值。在Python的布尔判断逻辑中,只有空字节对象b''会被判定为False,任何非空的字节对象(包括b'{}'、b' '这类空白内容)都会被判定为True。而且b'{}'是合法的空JSON对象,json.loads可以正常解析它。

正确的做法是先一次性获取响应对象,读取一次响应体并保存,再做判断和解析:

import http.client
import json

conn = http.client.HTTPConnection("example.com")
conn.request("GET", "/your-target-endpoint")

# 仅获取一次响应对象
resp = conn.getresponse()
# 仅读取一次响应体并保存
response_body = resp.read()

if not response_body:
    print("Error: empty response")
else:
    try:
        data = json.loads(response_body.decode())
        # 处理解析后的JSON数据
        print(data)
    except json.JSONDecodeError:
        print("Error: response is not valid JSON")

conn.close()

这种写法既避免了重复读取/获取响应的问题,也能准确判断真正的空响应,同时还能处理非JSON格式的响应异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 04:42:09