web-dev-qa-db-fra.com

Existe-t-il un moyen de dire à curl de ne pas utiliser le cache

J'essaie de connaître la taille du fichier d'une URL:

$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;

La sortie est 43331. Je pense que c'est trop bas parce que j'ai mis en cache Google. Cela peut-il être vrai? J'ai également testé Google sur un autre site qui calcule la taille de l'URL, et c'était deux fois plus gros.

25
Edgar

Vous pouvez utiliser CURLOPT_FRESH_CONNECT pour ça. De curl_setopt

CURLOPT_FRESH_CONNECT TRUE pour forcer l'utilisation d'une nouvelle connexion au lieu d'une connexion mise en cache.

curl_setopt($curl1, CURLOPT_FRESH_CONNECT, TRUE);
37
Olaf Dietsche

curl_setopt ($ curl1, CURLOPT_FRESH_CONNECT, 1); // n'utilise pas de version en cache de l'url

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

vérifier l'exemple ici

vous pouvez définir l'en-tête

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

ce lien peut vous être utile http://www.php.net/manual/en/function.curl-setopt.php#969

12
Subodh Ghulaxe

La meilleure façon d'éviter la mise en cache est d'appliquer l'heure ou tout autre élément aléatoire à l'URL, comme ceci:
$url .= '?ts=' . time();

donc par exemple au lieu d'avoir
http://example.com/content.php
tu aurais
http://example.com/content.php?ts=1212434353

6
Mike Walkowiak

Utilisez CURLOPT_FRESH_CONNECT - TRUE pour forcer l'utilisation d'une nouvelle connexion au lieu d'une connexion mise en cache.

Exemple:

<?php
    function check_url($url) {
        $c = curl_init();
        curl_setopt($c, CURLOPT_URL, $url);
        curl_setopt($c, CURLOPT_HEADER, 1); // get the header
        curl_setopt($c, CURLOPT_NOBODY, 1); // and *only* get the header
        curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); // get the response as a string from curl_exec(), rather than echoing it
        curl_setopt($c, CURLOPT_FRESH_CONNECT, 1); // don't use a cached version of the url
        if (!curl_exec($c)) { return false; }

        $httpcode = curl_getinfo($c, CURLINFO_HTTP_CODE);
        return ($httpcode < 400);
    }
?>

pour plus de détails sur la vérification des boucles http://php.net/manual/en/function.curl-setopt.php

que cela vous aide.

3
Tony Stark

Vous pouvez dire à CURL d'utiliser de nouvelles données en définissant CURLOPT_FRESH_CONNECT à TRUE

Vous pouvez en savoir plus sur la fonction CURL ici:

http://php.net/manual/en/function.curl-setopt.php

3
Dead Man