I have been loading the httpClient Core Service in a drupal 8 site. The service class works just fine when the request doesn't take too long from the API. It seems that if the request takes any longer than about 20-30 seconds the site throws a cURL response error 28 saying
GuzzleHttp\Exception\ConnectException: cURL error 28: Operation timed out after 30000 milliseconds with 0 bytes received (see http://curl.haxx.se/libcurl/c/libcurl-errors.html) in GuzzleHttp\Handler\CurlFactory::createRejection() (line 186 of ../vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php).
After a bit of poking around online I saw some reference to the fact that the "CURLOPT_TIMEOUT_MS" error doesn't work with all versions of php and they suggest to replace the reference to "CURLOPT_TIMEOUT_MS" to "CURLOPT_TIMEOUT" same for "CURLOPT_CONNECTTIMEOUT_MS".
In the above file with the error I found that in lines 374-380 which read the following
if (isset($options['timeout'])) {
$conf[CURLOPT_TIMEOUT_MS] = $options['timeout'] * 1000;
}
if (isset($options['connect_timeout'])) {
$conf[CURLOPT_CONNECTTIMEOUT_MS] = $options['connect_timeout'] * 1000;
}
if it's changed to the following
if (isset($options['timeout'])) {
$conf[CURLOPT_TIMEOUT] = $options['timeout'] * 1000;
}
if (isset($options['connect_timeout'])) {
$conf[CURLOPT_CONNECTTIMEOUT] = $options['connect_timeout'] * 1000;
}
removing the "_MS" then the site doesn't throw any errors.
Is this an error in the core code? Is this issue possibly related and can it be fixed with the patches attached to this d.o issue? Also please see this comment on that issue with reference to what I mentioned above.
Any suggestions or direction on this would be greatly appreciated!