#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