2009-09-18 9 views
2

Je rencontre des problèmes lors de l'utilisation de curl pour récupérer des en-têtes pour une minorité de sites.Utilisation de cURL avec PHP, impossible d'obtenir des en-têtes pour une minorité de sites

Quelques exemples sont digg.com et microsoft.com.

function get_headers_curl($url, $port) 
{ 
    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_URL,   $url); 
    curl_setopt($ch, CURLOPT_HEADER,   true); 
    curl_setopt($ch, CURLOPT_NOBODY,   true); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_PORT,   $port); 
    curl_setopt($ch, CURLOPT_TIMEOUT,  10); 

    $r = curl_exec($ch); 
    $r = split("\n", $r); 
    return $r; 
} 

C'est la fonction et les options que je suis en train d'utiliser, et pour la facilité d'utilisation j'ai un petit script de test en cours d'exécution @ isitup.org/test.php?d=example.com. Il retourne juste les en-têtes de la réponse, et avec les sites d'exemple le manque d'un.

Le problème est que ces sites semblent ignorer la demande et je n'obtiens aucune réponse. J'ai eu un jeu avec différentes options, mais je n'arrive pas à obtenir une réponse.

Y a-t-il quelque chose qui me manque? Ou est-ce simplement impossible d'accéder à de tels sites en utilisant curl?

Cordialement,

Sam

Edit:

test.php est la suivante:

<?php 

$domain = preg_replace("/[^A-Za-z0-9-\/\.\:]/", "", trim($_GET["d"])); 

$agent = "Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.2) Gecko/20121223 Ubuntu/9.25 (jaunty) Firefox/3.8"; 

function get_headers_curl($url, $port) 
{ 
    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_URL,   $url); 
// curl_setopt($ch, CURLOPT_HEADER,   true); 
// curl_setopt($ch, CURLOPT_NOBODY,   true); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_PORT,   $port); 
    curl_setopt($ch, CURLOPT_TIMEOUT,  10); 
    curl_setopt($ch, CURLOPT_USERAGENT,  $agent); 


    $r = curl_exec($ch); 
    $r = split("\n", $r); 
    return $r; 
} 

$headers = get_headers_curl("http://".$domain, 80); 

print("<pre>".print_r($headers,true)."</pre>"); 


?> 

Cependant, le nouvel agent utilisateur ne reçoit pas encore une réponse de ces sites. ..

Mise à jour: Woops a vu mon erreur, agent décalé dans la fonction tion et oui cela fonctionne! Merci: P

+0

Pouvez-vous poster le code PHP que vous utilisez dans test.php? – razzed

+3

BTW, split() est obsolète et sera supprimé en 6.0. – GZipp

+0

J'ai également essayé sur deux serveurs différents, à Paris et en Amérique, donc il ne s'agit pas d'un ip restreint ... –

Répondre

4

Les deux fonctionnent bien pour moi lorsque j'ajoute une chaîne d'agent utilisateur avec CURLOPT_USERAGENT.

// e.g. 
$agent = 'Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.2) Gecko/20121223 Ubuntu/9.25 (jaunty) Firefox/3.8'; 
curl_setopt($ch, CURLOPT_USERAGENT, $agent); 
+0

Pourriez-vous me dire toutes les options de boucle que vous utilisiez, peut-être que je fais quelque chose de mal avec mes options actuelles. Aussi merci pour l'information split(), ne savait pas à ce sujet. Je vais utiliser explode() à la place. –

+0

J'ai ajouté ces deux lignes à votre fonction, que je vois que vous avez maintenant fait. – GZipp

Questions connexes