W3docs

PHP cURL HTTP CODE return 0

If cURL is returning a HTTP code of 0, it usually indicates that cURL was unable to communicate with the server.

If cURL is returning a HTTP code of 0 (via curl_getinfo($ch, CURLINFO_HTTP_CODE)), it usually indicates that cURL was unable to communicate with the server or the request failed before a response was received. This can be caused by a number of issues, including network connectivity problems, DNS resolution failures, server issues, or problems with the cURL configuration.

$ch = curl_init('https://example.com');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_CONNECTTIMEOUT => 10,
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$errno = curl_errno($ch);
$error = curl_error($ch);

if ($errno !== 0) {
    echo "cURL Error ($errno): $error";
} elseif ($httpCode === 0) {
    echo "HTTP code is 0. Request failed or no response received.";
} else {
    echo "HTTP Code: $httpCode";
}

curl_close($ch);

There are a few steps you can take to troubleshoot this issue:

  1. Check network connectivity and DNS resolution. Use ping or nslookup to verify the host resolves correctly, and ensure firewalls allow outbound HTTP/HTTPS traffic.
  2. Enable cURL verbose mode (CURLOPT_VERBOSE => true) to inspect the exact request flow and identify where the connection drops.
  3. Verify timeout and proxy settings. Increase CURLOPT_TIMEOUT and CURLOPT_CONNECTTIMEOUT if the server is slow, and ensure proxy configurations match your environment.
  4. Check PHP and web server error logs for connection refused, timeout, or DNS resolution errors.
  5. Ensure the target server is online and reachable by testing the URL directly in a browser or via curl -v from the command line.