【问题标题】:python-requests: POST works, PUT fails - "Authentication credentials were not provided."python-requests:POST 有效,PUT 失败 - “未提供身份验证凭据。”
【发布时间】:2019-09-11 17:08:43
【问题描述】:

再次编辑更多更新:

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

下面是我的代码的 sn-p:

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 错误?

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

【问题讨论】:

    标签: django django-rest-framework python-requests authorization


    【解决方案1】:

    上面是在成功发送 PUT 请求(成功)后发送后续 GET 请求(没有标头,因此失败)。我通过记录所有到达服务器的请求来发现这一点。

    我弄清楚为什么要发送后续 GET 并更正它。我仍然不明白为什么来自成功 PUT 的 r.code 和 r.text 响应从未打印并点击控制台。如果我看到了,它会更容易找到。但是,由于主要问题已经解决,我不能花时间解决这个问题。

    我应该已经看到两种响应 - 控制台中的成功和失败 - 另一个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-29
      • 2018-11-28
      • 2020-07-22
      • 2021-11-29
      • 2019-04-26
      • 2020-01-11
      • 2019-07-29
      相关资源
      最近更新 更多