Python подключение к HTTP-серверу

#python #http #dropbox

#питон #http #компания Dropbox

Вопрос:

В моей программе я пытаюсь получить доступ https://api.dropbox.com/1/oauth2/token . Для того, чтобы сделать это, я пытался использовать http.client.HTTPSConnection() . Тем не менее, я получаю запрос 400 от сервера, хотя, когда я отправляю тот же запрос через свой браузер, я получаю фактический ответ:

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

Я полагаю, что это происходит для поддоменов, поскольку я также тестировал эту функцию https://docs.python.org/3/ , и результат очень похож.

Вот мой код (Python3):

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

Как я должен использовать http.client библиотеку для отправки правильного запроса?

Комментарии:

1. Попробуйте использовать прописную букву «GET»?

2. @Philip Tzou Я не могу поверить, что это действительно исправило это! Пожалуйста, отправьте ответ, чтобы я мог его принять

3. Возможно, стоит посмотреть requests

Ответ №1:

TL; DR: изменение строчной буквы «get» на заглавную «GET» должно решить проблему.

Причина: в соответствии с разделом 5.1.1, RFC2616:

Токен метода указывает метод, который должен выполняться на ресурсе, идентифицированном с помощью запроса-URI. Метод чувствителен к регистру.

RFC2616 также определил 8 методов, которые являются «OPTIONS», «GET», «HEAD», «POST», «PUT», «DELETE», «TRACE» и «CONNECT». Все они прописные.

Мы знаем, что некоторым HTTP-клиентам нравятся python-requests и jQuery.ajax также поддерживают методы в нижнем регистре, но они просто не являются стандартным способом, определенным RFC для использования этих методов. Чтобы предотвратить проблемы, сначала используйте заглавные буквы.

Комментарии:

1. requests было бы более уместным примером в нижнем регистре, поскольку это вопрос python