Barbi
Barbi

Reputation: 188

Python - check if empty response from GET request with HTTP lib

I have a simple basic question but I cannot find a reliable answer online nor in the lib's docs.

I have a sample code with does a GET request in Python, using lib http.client . I want to check if the response body is empty or not before performing the json.loads(response) .

In the docs it's not explained how and the resources online I find use request or urllib, but I can only use http.client.

I tried considering checking the response length

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

but I don't reckon it's reliable, so I'm considering something like

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

which I like more, but I'm not sure if it works: since the conn.getresponse().read returns an object in binary like

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

my question here is if b'{} would be considered empty or not.

Thank you in advance.

Upvotes: 0

Views: 126

Answers (1)

Florian Fasmeyer
Florian Fasmeyer

Reputation: 879

Question: "Is b'{}' considered empty or not?"

Answer: No

  • b'' is an empty sequence of bytes.
  • b'{}' is a sequence of two bytes, { and } respectively.
bool(b'') # False <=> Empty.
bool(b'{}') # True <=> Not Empty.

Read Bytes Literals.


However, an empty dictionary would be considered empty:

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

And a Bytes Literal can be trivially turned into a string by decode-ing it.

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

And you can turn a string of a dictionary into an actual Python dictionary by using the eval() function or read Convert a String representation of a Dictionary to a dictionary for a safer(?) option.


Additionally, if it is not too fragile for your use-case, you may use the expression:

if response == b'{}': 
    ...

Upvotes: 0

Related Questions