gpt4 book ai didi

python - 即使在添加 ETag header 后也没有收到 304 响应

转载 作者:可可西里 更新时间:2023-11-01 16:37:43 24 4
gpt4 key购买 nike

我正在尝试定期请求服务器获取数据。由于数据不会经常更改,我决定添加 If-None-Match header 以优化性能。问题是即使 ETag 保持不变,我仍然得到 200 状态代码而不是 304。这是我写的一个小脚本来验证它:

编辑:

import requests

headers = {'Accept':'application/json', 'Content-Type':'application/json', 'Authorization':'Bearer XXXX'}
url = "https://api.producthunt.com/v1/posts/12330"
req = None
response_data = None

for i in range(1,10):

if req:
headers = {'Accept':'application/json', 'Authorization':'Bearer XXXX', 'If-None-Match': req.headers['ETag']}
print req.request.headers.get('If-None-Match', 'Not set') # set

req = requests.get(url, headers = headers)

if response_data:
print sorted(req.json().items()) == sorted(response_data.items()) # always True

response_data = req.json()

print req.history # []
print req.status_code # always 200
  1. 正在设置 ETag header 。
  2. 返回的响应数据始终相同。
  3. 没有重定向,因为 req.history 总是返回一个空列表。
  4. 我已经删除了 Content-Type header ,但响应仍然是 200
  5. 我使用的请求版本是 2.5.0

最佳答案

所以有几件事情可能会发生:

  1. 您实际上可能没有添加 ETag header 。您应该在请求后检查您是否正在使用 req.request.headers.get('If-None-Match', 'Not set')。在第一次请求后,它永远不会返回 'Not set'

  2. 服务返回的表示可能会发生变化。我最近帮助某人调试了与 GitHub API 类似的东西(他们包括一个不同资源的简短表示,该资源具有可以更改和使 ETag 无效的属性)。您应该检查每次返回给您的数据是否完全相同。

  3. 检查 req.history 以确保没有可能导致问题的重定向

  4. 在没有请求正文的 GET 请求中,您不应指定 Content-Type。没有内容,所以不应该有内容类型。 (从技术上讲,服务器不应该被它打扰,但服务器是善变的东西,没有人知道他们会如何回应。)

除此之外,您能否提供您正在使用的请求版本?

关于python - 即使在添加 ETag header 后也没有收到 304 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27621689/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com