在python中使用受密码保护的API

时间:2018-03-11 16:51:41

标签: python-3.x api

我在使用api时遇到了麻烦。我得到了一个密码和标题(x-app-id)我在api上获得了很少的文档,但是下面显示了如何使用curl检索数据(来自文档):

curl -X GET "https://r6db.com/api/v2/players?
name=Bomb&platform=ps4&exact=true" -H "accept: application/json" -H "x-app-
id: password"

上方返回有关名为' Bomb'的玩家的信息。在平台上' ps4'有关游戏彩虹六围攻。 exact = true表示名称必须准确。

出于安全原因,无法提供密码。这是我尝试在python中复制上面的另一个帖子,我看到了

import json 
import requests
URL = "https://r6db.com/api/v2/players?name=Bomb&platform=ps4&exact=true"
KEY = "password"
headers  = {"x-app-id": "application/json"}
params = {
  "a-app-id": KEY
}
resp = requests.post(URL + "login/", headers = headers, 
data=json.dumps(params))

if resp.status_code != 200:
    print('error: ' + str(resp.status_code))
else:
    print('Success')

毋庸置疑它不起作用(输出错误404),这可能意味着我甚至无法获得x-app-id作为标题,任何帮助表示感谢。

1 个答案:

答案 0 :(得分:0)

我认为在使用模块requests

传递参数时,您已经搞得一团糟

标题中有两件事要传递:accept: application/jsonx-app-id: password,你在curl中做得很好。

但是在python中你传递标题"x-app-id": "application/json"(没有多大意义)并尝试传递"a-app-id": KEY}作为参数,而不是标题。

如果您将其作为参数传递,它将以https://r6db.com/api/v2/players?name=Bomb&platform=ps4&exact=true&a-app-id=KEY的形式包含在您的网址中,这不是您想要的。

您已经知道如何在python中传递标题,因此您只需要传递正确的标题:通过accept: application/jsonx-app-id: password

如果我的描述正确,我认为你不必传递数据参数。