Home > Net >  Parameters are ignored in python web request for JSON data
Parameters are ignored in python web request for JSON data

Time:10-11

I try to read JSON-formatted data from the following public URL: http://ws-old.parlament.ch/factions?format=json. Unfortunately, I was not able to convert the response to JSON as I always get the HTML-formatted content back from my request. Somehow the request seems to completely ignore the parameters for JSON formatting passed with the URL:

import urllib.request
response = urllib.request.urlopen('http://ws-old.parlament.ch/factions?format=json')
response_text = response.read()
print(response_text) #why is this HTML?

Does somebody know how I am able to get the JSON formatted content as displayed in the web browser?

CodePudding user response:

You need to add "Accept": "text/json" to request header.

For example using requests package:

r = requests.get(r'http://ws-old.parlament.ch/factions?format=json',
                 headers={'Accept':'text/json'})
print(r.json())

Result:

[{'id': 3, 'updated': '2022-02-22T14:59:17Z', 'abbreviation': ...

CodePudding user response:

Sorry for you but these web services have a misleading implementation. The format query parameter is useless. As pointed out by @maciek97x only the header Accept: <format> will be considered for the formatting.

So your can directly call the endpoint without the ?format=json but with the header Accept: text/json.

  • Related