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 ?

4voto

koljaTM Points 3892

J'ai obtenu cette erreur lorsque mon processus serveur a eu une exception en cours de génération de la réponse et a simplement fermé la connexion sans dire au revoir. curl attendait toujours des données de la connexion et s'est plaint (à juste titre).

3voto

Bill Richard Points 21

J'ai obtenu cette erreur lorsque mon serveur a manqué d'espace disque et a fermé la connexion en cours de génération de la réponse, fermant simplement la connexion

2voto

Parshin Dmitry Points 26

J'ai résolu cette erreur de cette manière.

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.someurl/');
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
ob_start();
$response = curl_exec($ch);
$data = ob_get_clean();
if(curl_getinfo($ch, CURLINFO_HTTP_CODE) == 200) success;

L'erreur persiste, mais je peux gérer les données de réponse dans une variable.

2voto

Jorge Blanco Points 21

J'ai eu ce problème en travaillant avec pycurl et je l'ai résolu en utilisant

c.setopt(pycurl.HTTP_VERSION, pycurl.CURL_HTTP_VERSION_1_0) 

comme le dit Eric Caron.

1voto

Darklighter Points 1411

J'ai obtenu cette erreur lorsque j'ai accidentellement téléchargé un fichier sur lui-même.
(J'avais créé un lien symbolique dans un montage sshfs du répertoire distant pour le rendre disponible au téléchargement, oublié de changer le répertoire de travail, et utilisé -OJ).

Je suppose que cela ne vous aidera pas vraiment lorsque vous lirez ceci, car cela signifie que votre fichier a été corrompu.

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