Obtenir systématiquement un statut de 0 Même si je copiez et collez l'URL envoyée dans mon navigateur, je reçois un objet JSON dès le retour
<?php $mainUrl = "https://api.xxxx.com/?"; $co = "xxxxx"; $pa = "xxxx"; $par = "xxxx"; $part= "xxxx"; $partn = "xxxx"; $us= "xxx"; $fields_string; $fields = array( 'co'=>urlencode($co), 'pa'=>urlencode($pa), 'par'=>urlencode($par), 'part'=>urlencode($part), 'partn'=>urlencode($partn), 'us'=>urlencode($us) ); foreach($fields as $key=>$value) { $fields_string .= $key . '=' . $value . '&' ;} $fields_string = rtrim($fields_string, "&"); $fields_string = "?" . $fields_string; $url = "https://api.xxxxx.com/" . $fields_string; $request = $url; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_TIMEOUT,'3'); $content = trim(curl_exec($ch)); $http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); print $url; print $http_status; print $content; ?>
5 Réponses :
réalisé que j'avais des problèmes SSL. Simplement définissez curlopt_ssl_verifypeer et curlopt_ssl_verifyHost sur false. Fonctionne. P>
Si vous souhaitez utiliser SSL, vous pouvez ajouter le drapeau Curlopt_Cainfo et pointez sur un certificat. Comme 'curl_setopt ($ curl, curlopt_cainfo, base_dir.' /Certs/cacert.pem ');'
@XOC: +1 De moi pour souligner qu'une connexion sécurisée est une option ici.
Vous devez toujours définir l'option Curlopt_verbose lorsque vous déboguez pour CURL. Votre valeur de délai d'attente semble très faible. P>
FYI, vous pouvez également obtenir un code d'état de 0 si la connexion CURL est terminée avant que le serveur distant ne renvoie les données. Dans ce cas, vous devez définir des options de temps de curlette pour éviter cette situation. Il suffit de poster ceci pour quelqu'un d'autre ayant des problèmes de statut 0. P>
Détails sur la façon de définir le temps de curl est ici Stackoverflow.com/a/11066378/243233
J'ai eu le même problème, vous devez exécuter la commande
Parfait! C'était le problème pour moi!
Essayez-le, vous obtiendrez des résultats positifs que j'ai ajouté Curlopt_ssl_verifypeer et Curlopt_ssl_verifyHost à False
<?php $mainUrl = "https://api.xxxx.com/?"; $co = "xxxxx"; $pa = "xxxx"; $par = "xxxx"; $part= "xxxx"; $partn = "xxxx"; $us= "xxx"; $fields_string; $fields = array( 'co'=>urlencode($co), 'pa'=>urlencode($pa), 'par'=>urlencode($par), 'part'=>urlencode($part), 'partn'=>urlencode($partn), 'us'=>urlencode($us) ); foreach($fields as $key=>$value) { $fields_string .= $key . '=' . $value . '&' ;} $fields_string = rtrim($fields_string, "&"); $fields_string = "?" . $fields_string; $url = "https://api.xxxxx.com/" . $fields_string; $request = $url; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_TIMEOUT,'3'); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false); $content = trim(curl_exec($ch)); $http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); print $url; print $http_status; print $content; ?>
Juste un côté sans rapport: PHP a une fonction
http_build_query très pratique code>. php.net/manual/fr/funcunk.http-build-query. php
est
https code>, y a-t-il une erreur renvoyée?
Yup, vient de réaliser que la vérification de l'erreur serait utile.