如何使用身份验证令牌并使用Python请求提交数据.POST?

时间:2015-06-29 17:38:22

标签: python authentication curl python-requests

使用WheniWork的api,我需要使用令牌进行身份验证,我还需要发送数据来创建新用户。我通过requests.post()发送的参数的顺序或名称是否重要?

如果我只是使用GET来提取信息,我可以让网址包含我正在查找的内容,然后发送作为令牌的有效负载。例如:

url = 'https://api.wheniwork.com/2/users/2450964'
payload = {"W-Token": "ilovemyboss"}
r = requests.get(url, params=payload)
print r.text

但是,当我尝试添加新用户时,我无法验证或无法正确传递数据。 api参考显示了使用cURL的这种格式:

curl https://api.wheniwork.com/2/users --data '{"first_name":"FirstName", "last_name": "LastName", "email": "user@email.com"}' -H "W-Token: ilovemyboss"

这是我在python(2.7.10)中使用请求编写的内容:

url = 'https://api.wheniwork.com/2/users'
data={'first_name':'TestFirst', 'last_name':  'TestLast','email':'test@aol.com'}
params={"W-Token": "ilovemyboss"}
r = requests.post(url, data=data, params=params)
print r.text

有人可以解释数据(用户)是否/如何与身份验证(令牌)分开发送?

2 个答案:

答案 0 :(得分:0)

我发现了这个问题! 数据(用户字典)需要在引号中。我不确定他们的API是否期望一个字符串,或者这是请求如何工作,或者是什么。但这是解决方案:

url = 'https://api.wheniwork.com/2/users'
data = "{'first_name':'TestFirst', 'last_name':  'TestLast','email':'test@aol.com'}"
params = {"W-Token": "ilovemyboss"}
r = requests.post(url, data=data, params=params)
print r.text

答案 1 :(得分:0)

我们可以通过使用json.dumps将数据字典转换为JSON字符串来解决上述问题。

  data={'first_name':'TestFirst', 'last_name':  'TestLast','email':'test@aol.com'}
  r = requests.post(url, data=json.dumps(data), params=params)
  print r.text