Usually, the cURL error ‘cURL 18 transfer closed with outstanding read data remaining’ occurs while retrieving data from a URL using a cURL.
Here at Bobcares, we have seen several such cURL related errors as part of our Server Management Services for web hosts and online service providers.
Today we’ll take a look at the causes for this error and see the fix.
More about ‘cURL 18 transfer closed with outstanding read data remaining’ error
Sometimes, the file we transfer will be smaller or larger than expected. Such cases arise when the server initially reports an expected transfer size, and then delivers data that doesn’t match the previously sent size.
In short, this error is related to content-length.
cURL error 18 can be described as below:
CURLE_PARTIAL_FILE
It means a Partial file i.e. only a part of the file was transferred.
Different causes and fixes for ‘cURL 18 transfer closed with outstanding read data remaining’ error
Now let’s see the different causes for this error. Also, we shall see how our Support Engineers fix it.
1. An incorrect Content-Length header was sent by the peer.
If an incorrect Content-Length header is been sent then the best option is to allow the cURL to set the length by itself. This will avoid the issues that might arise after setting the wrong size.
Moreover, we can fix this by suppressing the ‘Expect: 100-continue’ header that cURL usually sends.
curl_setopt($curl, CURLOPT_HTTPHEADER, array(‘Expect:’));
2. The connection gets timed-out as keep-alives were not sent to keep the connection going on.
To fix this issue, add the –keepalive-time.
For instance,
–keepalive-time 2
This option will set a time a connection will need to remain idle before sending the keepalive probes and the time between individual keepalive probes. However, if we use –no-keepalive then this option has no effect.
In case, if we use this option several times then the last one will be used. If you don’t specify the value then it defaults to 60 seconds.
In PHP cURL, the –keepalive-time option is available from the PHP version 5.5. You can use it as follows:
curl_setopt($connection, CURLOPT_TCP_KEEPALIVE, 1);
curl_setopt($connection, CURLOPT_TCP_KEEPIDLE, 2);
[Need any further assistance in fixing cURL errors? – We are here to help you.]
Conclusion
In short, this error occurs while retrieving data from a URL using a cURL. Today, we saw how our Support Engineers fix this error.
0 Comments