Python - 使用 HTTP lib 检查 GET 请求的响应是否为空

问题描述 投票:0回答:1

我有一个简单的基本问题,但我无法在网上或库文档中找到可靠的答案。

我有一个示例代码,使用 lib http.client 在 Python 中执行 GET 请求。 我想在执行 json.loads(response) 之前检查响应正文是否为空。

在文档中没有解释我如何找到使用 request 或 urllib 的在线资源,但我只能使用 http.client。

我尝试考虑检查响应长度

if conn.getresponse().length < 1:
   print("Error: empty response")
else:
   json.loads(conn.getresponse().read().decode())

但我认为它不可靠,所以我正在考虑类似的事情

if conn.getresponse().read():
   json.loads(conn.getresponse().read().decode())
else:
   print("Error: empty response")

我更喜欢它,但我不确定它是否有效:因为 conn.getresponse().read 返回一个二进制对象,例如

b'{\n  "field" : "0"}

我的问题是

b'{}
是否会被视为空。

提前谢谢您。

python http get httplib
1个回答
0
投票

问题:“

b'{}'
是否被视为空?”

答案:否

  • b''
    是一个空字节序列。
  • b'{}'
    是两个字节的序列,分别为
    {
    }
bool(b'') # False <=> Empty.
bool(b'{}') # True <=> Not Empty.

阅读字节文字


但是,空字典将被视为空:

bool({}) # True <=> Empty.

通过

decode
可以将字节文字简单地转换为字符串。

b'{}'.decode() # Return '{}'

您可以使用

eval()
函数将字典的字符串转换为实际的 Python 字典,或者阅读 将字典的字符串表示形式转换为字典以获得更安全的(?)选项。


此外,如果它对于您的用例来说不是太脆弱,您可以使用表达式:

if response == b'{}': 
    ...
© www.soinside.com 2019 - 2024. All rights reserved.