再次编辑更多更新:
尝试对 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 错误?
很高兴在评论中回答任何问题。
上面是在成功发送 PUT 请求(成功)后发送后续 GET 请求(没有标头,因此它失败了)。我通过记录所有命中服务器的请求来捕获此问题。
我弄清楚了为什么要发送后续 GET 并纠正了这一点。 我仍然不明白为什么来自成功 PUT 的 r.code 和 r.text 响应从未打印并击中控制台。如果我看到这一点,它就会更容易找到。但是,由于主要问题已解决,因此我无法花时间对其进行故障排除。
我应该在控制台中看到两个响应 - 成功和失败 - 问题。