【发布时间】: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