如何捕获 PHP 中的 cURL 错误

2022-08-30 06:24:29

我正在使用PHP curl函数将数据从我的本地机器发布到Web服务器。我的代码如下:

$c = curl_init();
curl_setopt($c, CURLOPT_URL, $url);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_POST, true);
curl_setopt($c, CURLOPT_POSTFIELDS, $data);
$result = curl_exec($c);
if (curl_exec($c) === false) {
    echo "ok";
} else {
    echo "error";
}
curl_close($c);

不幸的是,我无法捕获任何错误,例如404,500或网络故障。那么,我如何知道数据未发布到远程数据库或从远程数据库检索数据呢?


答案 1

您可以使用该函数来检测是否存在某些错误。例如:curl_error()

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $your_url);
curl_setopt($ch, CURLOPT_FAILONERROR, true); // Required for HTTP error codes to be reported via our call to curl_error($ch)
//...
curl_exec($ch);
if (curl_errno($ch)) {
    $error_msg = curl_error($ch);
}
curl_close($ch);

if (isset($error_msg)) {
    // TODO - Handle cURL error accordingly
}

请参阅此处的 libcurl 错误代码说明

请参阅 PHP curl_errno() 函数的描述

请参阅 PHP curl_error() 函数的描述


答案 2

如果是,http 错误将不会触发错误。CURLOPT_FAILONERRORfalsecurl

<?php
if (@$_GET['curl']=="yes") {
  header('HTTP/1.1 503 Service Temporarily Unavailable');
} else {
  $ch=curl_init($url = "http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']."?curl=yes");
  curl_setopt($ch, CURLOPT_FAILONERROR, true);
  $response=curl_exec($ch);
  $http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  $curl_errno= curl_errno($ch);
  if ($http_status==503)
    echo "HTTP Status == 503 <br/>";
  echo "Curl Errno returned $curl_errno <br/>";
}

推荐