python-requests:POST工作,PUT失败 - “未提供身份验证凭据”。

问题描述 投票:1回答:1

使用更多更新再次编辑:

尝试对python请求进行故障排除,以查看PUT请求是否有问题,但不确定如何继续。

以下是我的代码片段:

def API_request(url=None, headers=None, payload=None, update=False):
    r = None
    if update and headers and payload:
        print "put request to %s with %s of %s" % (url, headers, payload)
        r = requests.put(url, headers=headers, data=payload)
    if headers and payload and not update:
        print "post request to %s with %s of %s" % (url, headers, payload)
        r = requests.post(url, headers=headers, data=payload)

    print r.status_code
    print r.text

当上面发送POST请求来创建记录时,它可以工作。但是,每当它发送PUT请求时,我都会收到401错误:“未提供身份验证凭据”。这发生在多个端点上。

401
{"detail":"Authentication credentials were not provided."}

如果我将上述PUT打印功能的相关打印输出复制/粘贴到直接HTTPie请求中,它就可以工作。以下请求导致服务器上成功的200响应和更新记录:

http --debug PUT [url] < [file containing payload]  Authorization:'Token [token]'

如果我硬编码一个简单的脚本,除了导入python和json,并使用相同的标题(从原始语句打印)将完全相同的数据放到同一个URL中,它就可以了。以下脚本导致服务器上成功的200响应和更新记录:

import requests, json

url = "[my url"
headers = {'Content-Type': 'application/json', 'Authorization': 'Token [my token]'}
data = {[my data]}
payload = json.dumps(data)

r = requests.put(url, headers=headers, data=payload)

print r.status_code
print r.text

我已将这两个脚本中的信息发送到https://requestbin.fullcontact.com/,它们看起来完全相同。

大事件:

经过一整天的调试后,我发现即使是生成401错误的请求也成功命中服务器并更新了相应的记录。简而言之,如果没有正确的功能验证,这是不可能的。鉴于此,为什么我会从PUT请求中获得401错误?

很高兴回答评论中的任何问题。

django django-rest-framework python-requests authorization
1个回答
0
投票

以上是在成功发送PUT请求(成功后)后发送了后续GET请求(没有标题,因此失败)。我通过记录命中服务器的所有请求来捕获这个。

我想出了为什么跟进GET被发送并纠正了。我仍然不明白为什么来自成功的PUT的r.code和r.text响应从不打印并且没有打到控制台。如果我看到了,那就更容易找到。但是,由于主要问题已经解决,我无法花时间进行故障排除。

我应该已经看到了两个响应 - 控制台的成功和失败 - 问题再次出现。

© www.soinside.com 2019 - 2024. All rights reserved.