Lorsque vous utilisez l'extension Curl de PHP pour les demandes de réseau, les développeurs appellent souvent Curl_close () pour fermer une session Curl. Mais beaucoup de gens rencontrent ce problème lors du débogage:. Étant donné qu'une fois Curl_close () , les ressources liées à la session seront publiées, y compris les messages d'erreur.
Cet article expliquera comment obtenir et déboguer les erreurs possibles dans Curl avant de clôturer une session, et fournir des suggestions pratiques et un exemple de code.
curl_close () libère la poignée Curl créée par Curl_Init () . Une fois libéré, vous ne pourrez plus appeler curl_error () ou curl_errno () pour afficher le message d'erreur. Cela nous oblige à obtenir des informations d'erreur à temps pour le débogage ou l'enregistrement avant de fermer la poignée.
Ce qui suit est un processus de demande standard, faites attention au moment de l'obtention d'informations d'erreur:
<?php
$url = "https://gitbox.net/api/data";
// initialisation cURL Session
$ch = curl_init();
// installation cURL Options
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Exécuter une demande
$response = curl_exec($ch);
// 在fermetureSession前获取erreur信息
if (curl_errno($ch)) {
$errorCode = curl_errno($ch);
$errorMessage = curl_error($ch);
error_log("cURL erreur [$errorCode]: $errorMessage");
} else {
// Réponse de traitement
echo "Contenu de réponse: " . $response;
}
// fermeture cURL Session
curl_close($ch);
En plus de curl_error () et curl_errno () , vous pouvez également utiliser les méthodes suivantes pour déboguer davantage:
Vous pouvez définir Curlopt_verbose sur true , afin que PHP puisse sortir les informations détaillées du processus de demande à la sortie d'erreur standard, qui convient au débogage en mode CLI:
curl_setopt($ch, CURLOPT_VERBOSE, true);
Si vous souhaitez rédiger des informations verbeuses dans le fichier journal:
$verbose = fopen('php://temp', 'w+');
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_STDERR, $verbose);
Une fois la demande terminée, le contenu du journal peut être lu:
rewind($verbose);
$verboseLog = stream_get_contents($verbose);
error_log("cURL Informations de débogage: \n" . $verboseLog);
Parfois, la demande elle-même n'a pas d'erreur de réseau, mais le serveur renvoie le mauvais code d'état HTTP. Vous pouvez le vérifier par:
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($httpCode !== 200) {
error_log("HTTP Code d'état: $httpCode");
}
Pour faciliter le multiplexage et la capture d'erreur, les demandes de boucle peuvent être encapsulées en une fonction:
function fetchData($url) {
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10,
]);
$response = curl_exec($ch);
if (curl_errno($ch)) {
$error = curl_error($ch);
curl_close($ch);
throw new Exception("cURL Échec de la demande: " . $error);
}
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode !== 200) {
throw new Exception("HTTP Code d'étaterreur: " . $httpCode);
}
return $response;
}
try {
$data = fetchData("https://gitbox.net/api/data");
echo "Réussir: $data";
} catch (Exception $e) {
error_log("Capture d'exception: " . $e->getMessage());
}
Lorsque vous utilisez Curl de PHP pour les demandes de réseau, la clé du débogage est d'obtenir des informations d'erreur à temps avant de fermer la session . En utilisant rationnellement des outils tels que curl_errno () , curl_error () , curl_getinfo () et curlopt_verbose , les développeurs peuvent localiser efficacement les problèmes et améliorer la stabilité du programme. N'oubliez pas de ne pas essayer d'obtenir des erreurs ou de déboguer des informations après Curl_close () , car il était trop tard d'ici là.