Lors de la récupération de données à partir d'un serveur distant via l'outil de ligne de commande curl, vous pouvez rencontrer le message d'erreur "Erreur curl 18 - transfert terminé avec des données de lecture en attente restantes." Cette erreur indique qu'une tentative de récupération de données à partir d'une URL a été interrompue avant que la réponse complète ait été reçue, ce qui a entraîné des données partielles ou manquantes.
En général, cette erreur se produit lorsque CURLOPT_RETURNTRANSFER est défini sur true, indiquant que le La fonction curl_exec doit renvoyer les données récupérées de l'URL. Cependant, la désactivation de CURLOPT_RETURNTRANSFER en le définissant sur false permet d'afficher directement les données récupérées, évitant ainsi l'erreur.
Quelles sont les causes de l'erreur ?
Cette erreur se produit en raison de l'utilisation du codage fragmenté dans la réponse HTTP. Le codage en morceaux permet à un serveur d'envoyer des données en plusieurs morceaux, chaque morceau étant terminé par une séquence de caractères définie.
Lorsqu'une connexion est fermée avant que tous les morceaux ne soient reçus, libcurl reconnaît que le dernier morceau reçu était incomplet et génère le message d'erreur.
Résoudre le problème
Il existe deux manières principales de résoudre ce problème :
1. Désactiver le codage en morceaux :
Vous pouvez essayer d'émettre une requête HTTP 1.0 à la place en ajoutant l'option -0 à la commande curl. HTTP 1.0 n'utilise pas de codage fragmenté, cette solution de contournement peut donc résoudre l'erreur.
2. Inspectez la configuration du serveur et du réseau :
L'erreur peut indiquer un problème avec le serveur ou la connexion réseau. Il est recommandé de vérifier les éléments suivants :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!