web-dev-qa-db-fra.com

CURL et HTTPS, "Impossible de résoudre l'hôte"

J'essaie de récupérer le contenu d'une page à l'aide de CURL. La page qui effectue la récupération est https et la page qu'elle tente de récupérer est également https. Je reçois une erreur "Impossible de résoudre l'hôte" avec tous les paramètres que j'essaie.

$c=curl_init();
curl_setopt($c, CURLOPT_URL,$url);
//curl_setopt($c, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:x.x.x) Gecko/20041107 Firefox/x.x");
curl_setopt ($c, CURLOPT_RETURNTRANSFER, TRUE);
//curl_setopt($c, CURLOPT_SSL_VERIFYPEER, TRUE);
//curl_setopt($c, CURLOPT_SSL_VERIFYHOST, TRUE);
curl_setopt($c, CURLOPT_HEADER, FALSE);

$html=curl_exec($c);

if($html === false) {
    echo curl_error($c);
}
else {
    echo 'Operation completed without any errors';
}   


curl_close($c);

Des idées?

35
swt83

Peut-être un problème DNS?

Essayez votre URL contre ce code :

$_h = curl_init();
curl_setopt($_h, CURLOPT_HEADER, 1);
curl_setopt($_h, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($_h, CURLOPT_HTTPGET, 1);
curl_setopt($_h, CURLOPT_URL, 'YOUR_URL' );
curl_setopt($_h, CURLOPT_DNS_USE_GLOBAL_CACHE, false );
curl_setopt($_h, CURLOPT_DNS_CACHE_TIMEOUT, 2 );

var_dump(curl_exec($_h));
var_dump(curl_getinfo($_h));
var_dump(curl_error($_h)); 
25
KB22

J'ai trouvé que CURL peut décider d'utiliser IPv6, auquel cas il essaie de résoudre mais n'obtient pas de réponse IPv6 (ou quelque chose à cet effet) et expire.

Vous pouvez essayer le commutateur de ligne de commande -4 pour tester cela.

En PHP, vous pouvez configurer cette ligne en définissant ceci:

curl_setopt($_h, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
50
Staplerfahrer

J'ai eu le même problème. Impossible de résoudre google.com. Il y avait un bug quelque part dans php fpm, que j'utilise. Le redémarrage de php-fpm l'a résolu pour moi.

28
TecBeast

Juste une note qui peut être utile: j'avais des problèmes avec Apache sur mon ordinateur portable (qui se connecte par wifi APRÈS le démarrage) et le redémarrage du serveur (après la connexion) a résolu le problème. Je suppose que dans mon cas, cela peut être lié au démarrage d'Apache hors ligne et peut-être à noter que les recherches DNS échouent?

5
Rick

Il y a un bug actuel dans la glibc sur Ubuntu qui peut avoir cet effet: https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/16747

Pour le résoudre, mettez à jour libc et tous les éléments connexes (packages qui seront mis à niveau: libc-bin libc-dev-bin libc6 libc6-dev libfreetype6 libfreetype6-dev locales multiarch-support) et redémarrez le serveur.

2
LewisEmilyR

Après avoir essayé tout ce qui précède, je ne parviens toujours pas à résoudre mon problème. Mais j'ai une nouvelle solution pour mon problème.

Sur le serveur où vous allez faire une demande, il devrait y avoir une entrée de votre hôte virtuel.

Sudo vim /etc/hosts

et insérer

192.xxx.x.xx www.domain.com

La raison si vous faites une demande du serveur à lui-même alors, pour résoudre votre hôte virtuel ou pour l'identifier, le serveur aurait besoin de choses ci-dessus, sinon le serveur ne comprendra pas votre hôte (d'origine) demandeur.

1
Jigar7521