Michał Michał - 1 year ago 81
HTTP Question

Python connecting to an HTTP server

In my program, I am trying to access

. In order to do that, I was trying to use
. However, I am receiving a 400 statement from the server, even though when I send the same request through my browser, I get an actual response:

{"error": "Call requires one of the following methods: POST, OPTIONS. Got GET."}

I believe that this happens for subdomains, since I also tested the function for
, and the result is very similar.

Here is my code (Python3):

conn = http.client.HTTPSConnection('docs.python.org')
conn.request('get', '/3/')
response = conn.getresponse().read()

How should I use the
library to send the proper request?

Answer Source

TL;DR: Change the lowercase 'get' to uppercase 'GET' should resolve the problem.

The reason: according to section 5.1.1, RFC2616:

The Method token indicates the method to be performed on the resource identified by the Request-URI. The method is case-sensitive.

RFC2616 also defined 8 methods which are "OPTIONS", "GET", "HEAD", "POST", "PUT", "DELETE", "TRACE", and "CONNECT". All of them are uppercase.

We do know some HTTP clients like python-requests and jQuery.ajax also support lowercase methods but they are just not the standard way defined by the RFC for using those methods. To prevent issues, use uppercase ones first.