J'écris un site web en PHP qui regroupe des données provenant de divers autres sites. J'ai une fonction 'returnPageSource' qui prend une URL et retourne le html de cette URL comme une chaîne.Pourquoi cette fonction utilisant CURL fonctionnera-t-elle pour certaines URL mais pas pour d'autres?
function returnPageSource($url){
$ch = curl_init();
$timeout = 5; // set to zero for no timeout
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // means the page is returned
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOUT_CONNECTTIMEOUT, $timeout); // how long to wait to connect
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); // follow redirects
//curl_setopt($ch, CURLOPT_HEADER, False); // only request body
$fileContents = curl_exec($ch); // $fileContents contains the html source of the required website
curl_close($ch);
return $fileContents;
}
Cela fonctionne bien pour certains des sites Web dont j'ai besoin, comme http://atensembl.arabidopsis.info/Arabidopsis_thaliana_TAIR/unisearch?species=Arabidopsis_thaliana_TAIR;idx=;q=At5g02310, mais pas pour d'autres, comme http://www.bar.utoronto.ca/efp/cgi-bin/efpWeb.cgi?dataSource=Chemical&modeInput=Absolute&primaryGene=At5g02310&orthoListOn=0. Est-ce que quelqu'un a une idée de pourquoi?
Mise à jour
Merci pour les réponses. J'ai changé mon useragent pour être le même que mon navigateur (Firefox 3, qui peut accéder aux sites correctement), a changé le timeout à 0 et je n'arrive toujours pas à me connecter, mais je peux obtenir des messages d'erreur. curl_error() me donne l'erreur "could not connect to host", et curl_getinfo ($ ch, CURLINFO_HTTP_CODE); renvoie le code HTTP 0 ... ce qui n'est pas très utile. J'ai aussi essayé curl_setopt ($ ch, CURLOPT_VERBOSE, 1) ;, mais cela n'affiche rien. Quelqu'un a-t-il d'autres idées?
Mise à jour finale
Je viens de réaliser que je n'ai pas expliqué ce qui était faux - je avais juste besoin d'entrer les paramètres de proxy pour mon université (j'utilise le serveur de l'université). Tout a bien fonctionné après ça!
Est-ce que cela ne fonctionne toujours pas pour les mêmes sites Web si vous définissez le délai d'expiration à 0? –