2013-06-03 3 views
1

Я делаю запрос POST, пытаясь получить токен доступа к API. Я использую Python и пример я был дан из документации использует Curl библиотеки следующим образом ...Использование библиотеки запросов Python вместо cURL

curl \-F 'client_id=CLIENT-ID' \ 
    -F 'client_secret=CLIENT-SECRET' \ 
    -F 'grant_type=authorization_code' \ 
    -F 'redirect_uri=YOUR-REDIRECT-URI' \ 
    -F 'code=CODE' \https://api.instagram.com/oauth/access_token 

Я использую библиотеку запроса Python и написал следующее ...

data = 

{'client_id':'xxxxxxxxxxxxxxxxxx', 
'client_secret':'xxxxxxxxxxxxxxxxxx', 
'grant_type':'authorization_code', 
'redirect_uri':'http://localhost:14080/newpage', 
'code':code}   

token_url = 'https://api.instagram.com/oauth/access_token' 
p = requests.post(token_url, params = data) 

URL-адрес не дает мне доступа, мне интересно, как это то, что я написал, отличается от примера документации. Я новичок в Python (и программировании), поэтому помощь очень ценится.

+0

Библиотека называется 'запросы', а не' Request', а тег, который вы подключили, является неправильным. (Я исправлю это.) – abarnert

+0

woops, извините за это –

+0

Сначала, пожалуйста, покажите точные результаты, а не просто «не дает мне доступа». Между тем, одна общая причина, по которой люди сталкиваются с этой проблемой, является ненужной побегом. Не видя ваших настоящих строк, очень сложно определить, есть ли здесь проблема. – abarnert

ответ

2

Вы посылаете params, не data:

p = requests.post(token_url, params = data) 

Когда вы передаете словарь в качестве аргумента params, requests пытается отправить его как часть строки запроса на URL.

Когда вы передаете словарь в качестве аргумента data, requests сформируют-закодировать его и отправить его в качестве данных POST, который является эквивалентно тому, что делает завиток-х -F.

Вы можете проверить это, просмотрев URL-адрес запроса. Если print(p.url) показывает что-то вроде http://api.instagram.com/oauth/access_token?client_id=xxxxxx&client_secret=xxxxx&…, это означает, что ваши параметры попадали на URL, а не в почтовые данные.

См. Putting Parameters in URLs и More complicated POST requests в документации быстрого запуска для получения полной информации.


Для более сложной отладки, вы можете рассмотреть, указывая как curl и requests на локальном сервере, который регистрирует все, и сравнить и сопоставить то, что посылает каждому клиенту. Очень простой быстрый & грязный способ сделать это с netcat:

  • В/окне DOS терминала, запустите nc -kl 8123. (Фактические аргументы немного отличаются в зависимости от того, к какой netcat приходит ваша платформа, или, если ваша платформа не имеет ничего, например Windows, которую вы выбираете для установки.)
  • Запустите команду curl, но с http://localhost:8123/oauth/access_token as URL.
  • Запустите свой requests скрипт, опять же с http://localhost:8123/oauth/access_token в качестве URL-адреса.
+0

Да, вы правы! p.url дал мне структуру url, включающую параметры данных. Благодарю. Я проведу nc -kl 8123. –

Смежные вопросы