J'ai écrit ce simple morceau de code:
$ch = curl_init();
//Set options
curl_setopt($ch, CURLOPT_URL, "http://www.php.net");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$website_content = curl_exec ($ch);
Dans mon cas $website_content
vient comme false
. Quelqu'un peut-il suggérer / conseiller quelque chose qui pourrait mal tourner?
curl_error()
les détails des erreurs et publiez-les ici, s'il vous plaît.curl_error()
révélé?Réponses:
La vérification et la gestion des erreurs sont l'ami du programmeur. Vérifiez les valeurs de retour des fonctions cURL d'initialisation et d'exécution.
curl_error()
etcurl_errno()
contiendra de plus amples informations en cas de panne:* Le
curl_init()
manuel indique:J'ai observé la fonction à renvoyer
FALSE
lorsque vous utilisez son$url
paramètre et que le domaine n'a pas pu être résolu. Si le paramètre n'est pas utilisé, la fonction peut ne jamais revenirFALSE
. Vérifiez-le toujours de toute façon, car le manuel ne précise pas clairement ce que sont réellement les «erreurs».la source
curl_exec
retour FALSE. - Curl Verbose Mode dans l'exemple PHPDans mon cas, je dois définir
VERIFYHOST
etVERIFYPEER
àfalse
, comme ceci:avant l'appel à
curl_exec($ch)
.Parce que je travaille entre deux environnements de développement avec des certificats auto-attribués. Avec des certificats valides, il n'est pas nécessaire de définir
VERIFYHOST
etVERIFYPEER
àfalse
car lacurl_exec($ch)
méthode fonctionnera et retournera la réponse que vous attendez.la source
Cela m'est arrivé hier et dans mon cas, c'était parce que je suivais un manuel PDF pour développer un module pour communiquer avec une API et tout en copiant le lien directement à partir du manuel, pour une raison étrange, le
hyphen
lien copié était dans un autre encodage et donc lecurl_exec()
retournait toujoursfalse
car il était incapable de communiquer avec le serveur.Il m'a fallu quelques heures pour enfin comprendre la différence entre les personnages ci-dessous:
Chaque fois que j'essayais d'accéder au lien directement à partir d'un navigateur, il se convertissait en quelque chose comme
https://www.xn--eexample-0m3d.com/api
.Il peut vous sembler qu'ils sont égaux mais si vous vérifiez l'encodage du
hyphens
ici vous verrez que le premierhyphen
est un caractère unicode U + 2010 et l'autre est un U + 002D .J'espère que cela aide quelqu'un.
la source