Python请求:如何处理状态码304

时间:2018-09-01 14:08:26

标签: python python-requests

我正在尝试使用requestsbs4从网站获取信息,但是正在接收状态代码304,但没有收到request.get()的内容。我已经读了一些书,并了解了这段代码表明该资源已经在我的缓存中。如何从缓存中访问资源,或者最好清除缓存,以便可以接收新资源?

我尝试添加以下标头:headers={'Cache-Control': 'no-cache'}requests.get(),但是仍然存在相同的问题。

此外,我已经研究了requests-cache模块,但不清楚如何或是否可以使用它来解决问题。

代码:

import requests

r = requests.get('https://smsreceivefree.com/')

print(r.status_code)
print(r.content)

输出:

304
b''

1 个答案:

答案 0 :(得分:2)

如果客户端发送了条件请求(例如具有If-Modified-Since标头的请求),则服务器应发送 304未修改回复。如果客户端已经具有该页面的缓存版本,并且想要避免下载内容 他已经拥有该页面的最新版本,则这是有道理的。

在这种情况下,网站似乎向某些类型的客户发送了304,这似乎是用户代理似乎指示自动化的情况(在您的情况下是对的)。

服务器应该发送4xx错误代码,可能是 403 Forbidden ,但可能使用304,以使机器人编写器脱离正确的轨道,并使他们进入StackOverflow。