2015-08-07 3 views
0

Я использую запросы python python для подключения api.
Пример соединения для АФИнеподдерживаемый тип операндов для%: 'dict' и 'unicode'

curl -H"Authorization:Bearer <token>"-H"Content-Type: application/json" -d '{"filter" :{}}'https://sandbox-api.flipkart.net/sellers/orders/search 

Мой код:

import requests 

class FlipkartAPI: 
    def __init__(self, token): 
     self.token = token 

    def search_orders(self): 
     headers = {'Authorization':'Bearer %s', 
       'Content-Type':'application/json'} % self.token 
     url = "https://api.flipkart.net/sellers/orders/search" 
     return requests.get(url, params = headers) 

Переменная маркер типа Юникода.
Что не так с моим кодом?
EDIT: Мой код для выборки заказов:

from auth import Authentication 
from api import FlipkartAPI 

app_id = 'app id' 
app_secret = 'app secret' 

auth = Authentication(app_id, app_secret) 
get_token = auth.get_access_token() 
token_str = get_token.json() 
token = token_str['access_token'] 

fk = FlipkartAPI(token) 
orders = fk.search_orders() 
print orders 

я могу генерировать маркер означает, что мое приложение идентификатор и приложение секрет правильны И я имею право получить доступ. также ссылаются на апи документации:

Flipkart Documentation

ответ

2

Вы должны применить % операцию на строку в формате заполнителем, а не словарь:

headers = {'Authorization':'Bearer %s' % self.token, 
      'Content-Type':'application/json'} 

Вы также используете неправильный аргумент ключевого слова, неправильный метод HTTP и не устанавливают полезную нагрузку JSON.

  • использование headers, не params
  • использование POST, то curl-d переключатель указывает, что запрос POST сделан, а не GET
  • Вы забыли предоставить тело JSON с filter

Правильный перевод команды curl:

headers = {'Authorization':'Bearer %s', 
     'Content-Type':'application/json'} % self.token 
url = "https://api.flipkart.net/sellers/orders/search" 
filter = {'filter': {}} 

return requests.post(url, json=filter, headers=headers) 

Параметр json был добавлен в requests версия 2.4.2; если у вас есть старая версия вам нужно закодировать телу JSON себя:

import json 

# ... 

return requests.post(url, data=json.dumps(filter), headers=headers) 
+0

выше код дает мне эту ошибку --- TypeError: запрос() получил неожиданный аргумент ключевого слова «» JSON –

+0

@ManishGupta : тогда у вас есть более старая версия 'запросов'. Используйте 'data = json.dumps (filter)' в этом случае вместо аргумента ключевого слова 'json'. –

+0

Вы имели в виду: request.post (url, data = json.dumps (filter), headers = headers). Он говорит, что глобальное имя json не определено –

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