kıvırmak hatası 18 - transferi üstün okuma veri kalan kapalı

3 Cevap php

kıvırmak kullanarak bir URL'den veri alırken, bazen (olguların% 80) elde

error 18: transfer closed with outstanding read data remaining

Döndürülen veri parçası eksik olan. Garip bir şey bu CURLOPT_RETURNTRANSFER false olarak ayarlandığında, bu curl_exec işlevi verileri geri dönmez ama doğrudan içeriği görüntüler ortaya asla olmasıdır.

Ne sorun olabilir? Ben bu tür davranışları önlemek için bazı seçenekler ayarlayabilir miyim?

Önerileriniz için çok teşekkürler!

3 Cevap

Hata dize oldukça basit tam libcurl gördüğü budur: bir yığın halinde kodlama akışı alıyor beri almak için bir yığın sol veri olduğunda bunu bilir. Bağlantı kapatıldığında, libcurl son alınan yığın eksik olduğunu bilir. Sonra bu hata kodunu alabilirsiniz.

İşte bu hatayı önlemek için yapabileceğimiz bir şey yok, ama can (Yığın halinde kodlama sonra olmayacak çünkü) yerine bir HTTP 1.0 isteği yayımlayarak etrafında çalışmak deneyin ama aslında bu büyük olasılıkla olduğunu sunucu ya da bir şekilde ağ / kurulumunda bir kusur.

Ben aynı sorun vardı, ama baskılayarak bunu düzeltmek başardı 'Expect: 100-devam' Curl genellikle gönderir başlık:

curl_setopt ($ curl, CURLOPT_HTTPHEADER, array ('Expect:'));

Bu arada, ben her türlü sorunları vardır JDK 6 DİNLENME şeyler, dahil HTTP sunucusu çağrıları gönderiyorum. Bu durumda, ilk 100 yanıt gönderir ve daha sonra bazı istekleri ile doğru sonraki 200 yanıt göndermez.

Ben bu arada bu hatayı çözdük.

$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;

Hata yine oluşursa, ama değişken tepki verileri işleyebilir.