% 不支持的操作数类型:'dict' 和 'unicode'
unsupported operand type(s) for %: 'dict' and 'unicode'
我正在使用 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)
变量token是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 和应用程序密码是正确的,并且我已获得访问权限。
还有 link 到 api 文档:
您需要将 %
操作应用于格式占位符 的 字符串,而不是字典:
headers = {'Authorization':'Bearer %s' % self.token,
'Content-Type':'application/json'}
您还使用了错误的关键字参数、错误的 HTTP 方法,并且没有设置 JSON 负载。
- 使用
headers
,而不是params
- use 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)
我正在使用 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)
变量token是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 和应用程序密码是正确的,并且我已获得访问权限。 还有 link 到 api 文档:
您需要将 %
操作应用于格式占位符 的 字符串,而不是字典:
headers = {'Authorization':'Bearer %s' % self.token,
'Content-Type':'application/json'}
您还使用了错误的关键字参数、错误的 HTTP 方法,并且没有设置 JSON 负载。
- 使用
headers
,而不是params
- use 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)