101 votes

Erreur curl 18 - transfert fermé avec des données de lecture en attente

Lors de la récupération de données à partir d'une URL en utilisant curl, il m'arrive parfois (dans 80% des cas) d'obtenir

l'erreur 18 : transfert fermé avec des données de lecture en attente

Une partie des données renvoyées manque alors. La chose étrange est que cela ne se produit jamais lorsque CURLOPT_RETURNTRANSFER est défini sur false, c'est-à-dire que la fonction curl_exec ne renvoie pas les données mais affiche directement le contenu.

Quel pourrait être le problème ? Puis-je définir certaines options pour éviter un tel comportement ?

1voto

Ndi Cedric Points 63

J'ai eu le même problème. J'ai essayé toutes ces solutions mais aucune n'a fonctionné. Dans mon cas, la requête fonctionnait bien dans Postman mais lorsque je la fais avec curl en php, j'obtiens l'erreur mentionnée ci-dessus.

Ce que j'ai fait était de vérifier le code PHP généré par Postman et de reproduire la même chose.

Tout d'abord, la requête est définie pour utiliser la version Http 1.1 Et la deuxième partie la plus importante est l'encodage pour moi.

Voici le code qui m'a aidé

curl_setopt($ch, CURLOPT_ENCODING, '');
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);

Si je retire l'encodage CurlOpt, je reçois l'erreur.

0voto

James Stevens Points 315

J'ai obtenu cette erreur en exécutant à travers un proxy nginx et je faisais tourner nginx sous l'identifiant utilisateur daemon au lieu de l'identifiant utilisateur nginx.

Cela signifie que certains répertoires temporaires de nginx n'étaient pas accessibles / inscriptibles.

Passer de user daemon; à user nginx; a résolu le problème pour moi.

0voto

hakik ayoub Points 13

Cela peut être lié à de nombreux problèmes. Dans mon cas, j'utilisais Curl pour construire une image (via l'API Docker). Ainsi, la construction était bloquée, c'est pourquoi j'ai obtenu cette erreur. Une fois que j'ai corrigé la construction, l'erreur a disparu.

0voto

Ashot Points 33

Nous pouvons résoudre ce problème en supprimant l'en-tête Expect: 100-continue que cURL envoie normalement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X