Your code produced an empty response body, you’d want to check for that or catch the exception raised. It is possible the server responded with a 204 No Content response, or a non-200-range status code was returned (404 Not Found, etc.). Check for this.
Note:
- There is no need to use
simplejson
library, the same library is included with Python as thejson
module. - There is no need to decode a response from UTF8 to unicode, the
simplejson
/json
.loads()
method can handle UTF8 encoded data natively. pycurl
has a very archaic API. Unless you have a specific requirement for using it, there are better choices.
Either the requests
or httpx
offers much friendlier APIs, including JSON support. If you can, replace your call with:
import requests response = requests.get(url) response.raise_for_status() # raises exception when not a 2xx response if response.status_code != 204: return response.json()
Of course, this won’t protect you from a URL that doesn’t comply with HTTP standards; when using arbirary URLs where this is a possibility, check if the server intended to give you JSON by checking the Content-Type header, and for good measure catch the exception:
if ( response.status_code != 204 and response.headers["content-type"].strip().startswith("application/json") ): try: return response.json() except ValueError: # decide how to handle a server that's misbehaving to this extent