2015-04-21 2 views
0

У меня возникли проблемы с преобразованием curl-кода в python, чтобы получить доступ к токену API.Преобразование curl в python для доступа к api

Данный код:

curl -k -d "grant_type=client_credentials&scope=PRODUCTION" -H "Authorization :Basic <long base64 value>, Content-Type: application/x-www-form-urlencoded" https://api-km.it.umich.edu/token 

Я знаю, что -H указывает заголовок, однако Im не уверен, что делать с опцией -d. До сих пор у меня есть:

authorizationcode = 'username:password' 
authorizationcode = base64.standard_b64encode(authorizationcode) 
header = {'Authorization ': 'Basic ' + authorizationcode, 'Content-Type': 'application/x-www-form-' + authorizationcode} 

r = requests.post('https://api-km.it.umich.edu/token', 
    data = 'grant_type=client_credentials&scope=PRODUCTION', 
    headers = header) 

Кроме того, эти инструкции:

Получите ваш потребительский ключ и секретный код из Справочника API. Они создаются на странице «Подписки» после того, как приложение успешно подписало API. Объедините ключи потребителя и ключи секретности потребителя в формате: ключ потребителя: секрет потребителя. Кодируйте объединенную строку, используя base64. Большинство языков программирования имеют метод base64 кодировать строку. Пример кода для base64. Посетите сайт base64encode для получения дополнительной информации. Выполните POST-вызов API-интерфейсов для доступа к токену доступа.

Наши данные верно, однако мы получаем ошибку 415 с сервера.

Помощь будет с благодарностью.

+1

«-d» - это «данные», которые должны быть отправлены в теле запроса, и вы, кажется, применили это правильно в своем методе метода сообщения. В чем проблема? – ThatsAMorais

+0

мы получаем ошибку 415 с сервера –

+1

, вы добавили свой 'authorizationcode' в конец заголовка Content-Type. Он должен просто быть «application/x-www-form-urlencoded» так же, как запрос curl. – krock

ответ

0

415 Ошибка описана в http://www.checkupdown.com/status/E415.html как «неподдерживаемый тип медиа»

Как @krock упоминалось, тип содержимого не указанный в качестве application/x-www-form-urlencoded, а она установлена ​​на x-www-form- + код AUTH.

0

Вы устанавливаете неправильный Content-Type заголовок:

'Content-Type': 'application/x-www-form-' + authorizationcode 

Это должно быть 'application/x-www-form-urlencode'. Однако вы не должны устанавливать его , поскольку requests делает это автоматически, если вы переходите в словарь к аргументу data.

requests также будет обрабатывать заголовок Authorization; передать имя пользователя и пароль для auth аргумента в виде кортежа:

auth = ('username', 'password') 
params = {'grant_type': 'client_credentials', 'scope': 'PRODUCTION'} 

r = requests.post('https://api-km.it.umich.edu/token', data=params, auth=auth) 

где user и password являются частями до и после двоеточия. requests произведет правильный Основной base64-кодированный заголовок для вас из этих двух строк.

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