【问题标题】:How to use an auth token and submit data using Python requests.POST?如何使用身份验证令牌并使用 Python requests.POST 提交数据?
【发布时间】:2015-09-16 07:03:36
【问题描述】:

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

如果我只是使用 GET 来获取信息,我可以让 url 包含我正在寻找的东西,然后发送一个作为令牌的有效负载。例如:

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

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

【问题讨论】:

    标签: python authentication curl python-requests


    【解决方案1】:

    我发现了问题! 数据(用户字典)需要用引号引起来。我不确定他们的 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
    

    【讨论】:

      【解决方案2】:

      我们可以通过使用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
      

      【讨论】:

      • 感谢 Stijn 验证我的答案并将其格式化以使其看起来更好。
      猜你喜欢
      • 2016-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      • 2017-11-22
      • 2019-06-28
      • 2016-09-06
      相关资源
      最近更新 更多