我无法使用Requests
我正在测试的API指示要在消息正文中POSTED的参数device_info。它还将device_info表示为表单字段。在Requests的所有文档中,我找不到如何在参数中添加“名称”,而不是在json中使用它的值来点击名称。这是我尝试过的。
import requests
import json
loginPayload = {'device_info':{'app-id':'fc','os-type':'ios'}}
loginHeaders = {'content-type': 'application/json','Authorization':'Basic base64here'}
loginUrl = "http://subdomain.test.com/endpoint/method"
loginPost = requests.post(loginUrl, params=json.dumps(loginPayload), headers=loginHeaders)
print loginPost.text
我尝试将params=
更改为data=
,但我没有运气。
我得到的回复是:
{
"response": {
"message": "Parameter 'device_info' has invalid value ()",
"code": 400,
"id": "8c4c51e4-9db6-4128-ad1c-31f870654374"
}
}
编辑:
到达新的地方!我没有修改我的代码,如下所示:
import requests
login = 'test'
password = 'testtest'
url = "http://subdomain.domain.com/endpoint/method"
authentication = (login,password)
payload = {'device_info': {'device_id': 'id01'}}
request = requests.post(url, data=payload, auth=authentication)
print request.text
产生:
{
"response": {
"message": "Parameter 'device_info' has invalid value (device_id)",
"code": 400,
"id": "e2f3c679-5fca-4126-8584-0a0eb64f0db7"
}
}
这似乎是什么问题?我不是以所需格式提交的吗?
EDITED:解决方案是将我的参数更改为:
{
"device_info": "{\"app-id\":\"fc\",\"os-type\":\"ios\",\"device_id\":\"myDeviceID1\"}"
}
答案 0 :(得分:2)
所以这里有一些问题:
params
是指查询字符串的参数。您需要的是data
参数。因此,如果您的应用程序正在寻找'application / x-www-form-urlencoded'数据,那么您不应该:
Content-Type
标题json.dumps
您应该做的是以下内容:
import requests
login_payload = {'device_info': {'app-id': 'fc', 'os-type': 'os'}}
authentication = (login, password) # Anyone who sees your authorization will be able to get this anyway
url = 'http://example.com/login'
response = requests.post(url, data=login_payload, auth=authentication)
我不知道使用x-www-form-urlencoded数据的RESTful API,但您也可能错误地描述了您的问题。你没有给我们太多的东西继续,你没有给我更多的猜测能力。因此,根据你说的其他事情,这是我绝对最好的猜测。