I'm running a curl request on an eXist database through php. The dataset is very large, and as a result, the database consistently takes a long amount of time to return an XML response. To fix that, we set up a curl request, with what is supposed to be a long timeout.
$ch = curl_init();
$headers["Content-Length"] = strlen($postString);
$headers["User-Agent"] = "Curl/1.0";
curl_setopt($ch, CURLOPT_URL, $requestUrl);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, 'admin:');
curl_setopt($ch,CURLOPT_TIMEOUT,1000);
$response = curl_exec($ch);
curl_close($ch);
However, the curl request consistently ends before the request is completed (<1000 when requested via a browser). Does anyone know if this is the proper way to set timeouts in curl?
Your code sets the timeout to 1000 seconds. For milliseconds, use
CURLOPT_TIMEOUT_MS
.There is a quirk with this that might be relevant for some people... From the PHP docs comments.
From http://www.php.net/manual/en/function.curl-setopt.php#104597
If you are using PHP as a fastCGI application then make sure you check the fastCGI timeout settings. See: PHP curl put 500 error
See documentation: http://www.php.net/manual/en/function.curl-setopt.php
CURLOPT_CONNECTTIMEOUT
- The number of seconds to wait while trying to connect. Use 0 to wait indefinitely.CURLOPT_TIMEOUT
- The maximum number of seconds to allow cURL functions to execute.also don't forget to enlarge time execution of php script self:
You can't run the request from a browser, it will timeout waiting for the server running the CURL request to respond. The browser is probably timing out in 1-2 minutes, the default network timeout.
You need to run it from the command line/terminal.
Hmm, it looks to me like
CURLOPT_TIMEOUT
defines the amount of time that any cURL function is allowed to take to execute. I think you should actually be looking atCURLOPT_CONNECTTIMEOUT
instead, since that tells cURL the maximum amount of time to wait for the connection to complete.