有没有办法告诉curl不要使用缓存

2022-08-30 14:25:38

我正在尝试找出网址的文件大小:

$url1 = 'www.google.com';
$curl1 = curl_init();
curl_setopt($curl1, CURLOPT_URL, $url1); 
curl_setopt($curl1, CURLOPT_RETURNTRANSFER, TRUE);
curl_exec($curl1);
$file_size = curl_getinfo($curl1, CURLINFO_SIZE_DOWNLOAD ); 
$file_size_kb = $file_size / 1000;
echo $file_size_kb;

输出为 。我认为它太低了,因为我有谷歌缓存。这是真的吗?另外,我在其他一些网站上测试了谷歌,计算网址的大小,它是它的两倍。43331


答案 1

您可以使用它。从 curl_setoptCURLOPT_FRESH_CONNECT

CURLOPT_FRESH_CONNECTTRUE 可强制使用新连接而不是缓存连接。

curl_setopt($curl1, CURLOPT_FRESH_CONNECT, TRUE);

根据RFC 7234 - 超文本传输协议(HTTP / 1.1):缓存5.2。缓存控制

“Cache-Control”标头字段用于指定请求/响应链中缓存的指令。

5.2.1. 请求缓存控制指令定义了几个指令来控制缓存对响应的使用。其中之一是

5.2.1.4. 无缓存

“no-cache”请求指令指示缓存不得使用存储的响应来满足请求,而无需在源服务器上成功验证。

因此,设置适当的标头

curl_setopt($curl1, CURLOPT_HTTPHEADER, array("Cache-Control: no-cache"));

应确保将返回有效且最新的响应。我知道,如果服务器上的验证允许这样做,这仍然可能导致缓存的响应。


但是,5.2.2.1.must-realidate 是由服务器给出的响应缓存控制指令以及对请求的响应

[...]当且仅当未能验证对表示的请求可能导致不正确的操作(例如静默的未执行的金融交易)时,服务器才应使用必须重新验证的指令。


答案 2

curl_setopt($curl 1, CURLOPT_FRESH_CONNECT, 1);不要使用缓存版本的网址

CURLOPT_FRESH_CONNECT TRUE to force use of a new connection instead of a cached one.

在此处检查示例

您可以设置标题

$headers = array( 
                 "Cache-Control: no-cache", 
                ); 
curl_setopt($curl1, CURLOPT_HTTPHEADER, $headers);

此链接可能对您有所帮助 http://www.php.net/manual/en/function.curl-setopt.php#96903


推荐