Guzzle httpClient Drupal Core throwing cURL error 28 Operation timed out 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!
As @cilefen suggested in his comments my problem was related to the timeout value that was being set in the calling code rather then an error with an undefined constant. I had fixed the error in my particular situation by adjusting the timeout value in my custom code that was making the API call with the following (600 is an example).

$request = $client-&gt;post($url, [
  'timeout' =&gt; 600,
  'json' =&gt; [array(...)],
]);