%不支持的操作数类型:'dict'和'unicode'

时间:2015-08-07 08:38:42

标签: python python-requests

我正在使用python python请求来连接api api的示例连接是

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)

变量令牌的类型为unicode。
我的代码出了什么问题?
编辑: 我获取订单的代码:

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

我可以生成令牌意味着我的应用ID和应用秘密是正确的我有权获得访问权限。 也链接到api文档:

Flipkart Documentation

1 个答案:

答案 0 :(得分:2)

您需要将encodeURIComponent操作应用于格式占位符的字符串,而不是字典:

%

您还使用了错误的关键字参数,错误的HTTP方法,并且没有设置JSON有效负载。

  • 使用headers = {'Authorization':'Bearer %s' % self.token, 'Content-Type':'application/json'} ,而不是headers
  • 使用POST,params curl开关表示发出了POST请求,而不是GET
  • 您忘记提供带有-d
  • 的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版本2.4.2;如果你有一个旧版本,你需要自己编码JSON主体:

requests