如何使用curl在php中调试get请求

Posted

技术标签:

【中文标题】如何使用curl在php中调试get请求【英文标题】:How to debug a get request in php using curl 【发布时间】:2015-07-22 18:44:09 【问题描述】:

我正在尝试使用 curl 在 php 中发出获取请求。这就是我正在做的:

$curl = curl_init();

curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, "username:password");

curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

$result = curl_exec($curl);
curl_close($curl);

printf($result);

但是 $result 没有打印出任何东西,没有成功或失败消息。我已经通过邮递员和网络浏览器成功到达了端点,所以我知道它可以工作。打印出 $curl prints: "Resource #1" 这让我认为 curl 已正确安装在服务器上。

我不确定下一步要采取什么步骤才能使事情正常进行。

【问题讨论】:

如果你想调试它,那么从 var_dump 或 var_export 开始而不是 printf。这至少会给你类型和值,所以你知道例如你是否得到一个布尔值。 curl_error()。并确保打开错误,error_reporting(E_ALL); 【参考方案1】:

添加更多选项以进行故障排除。

检查错误响应。

如果没有错误,获取详细信息:

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT,10);
curl_setopt($ch, CURLOPT_FAILONERROR,true);
curl_setopt($ch, CURLOPT_ENCODING,"");

curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_HEADER, true);

$data = curl_exec($ch);
if (curl_errno($ch))
    $data .= 'Retreive Base Page Error: ' . curl_error($ch);

else 
  $skip = intval(curl_getinfo($ch, CURLINFO_HEADER_SIZE)); 
  $head = substr($data,0,$skip);
  $data = substr($data,$skip);
  $info = curl_getinfo($ch);
  $info = var_export($info,true);

echo $head;
echo $info;

【讨论】:

我刚刚删除了请求头选项。【参考方案2】:

您可以像这样使用 curl 的 CURLOPT_VERBOSE 和 CURLOPT_STDERR:

$curl = curl_init();

curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, "username:password");

curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

$verbose = fopen('php://temp', 'w+');
curl_setopt($curl, CURLOPT_VERBOSE, true);
curl_setopt($curl, CURLOPT_STDERR, $verbose);


$result = curl_exec($curl);
curl_close($curl);

rewind($verbose);
$verboseLog = stream_get_contents($verbose);
echo "Verbose information:\n<pre>", htmlspecialchars($verboseLog), "</pre>\n";



printf($result);

【讨论】:

以上是关于如何使用curl在php中调试get请求的主要内容,如果未能解决你的问题,请参考以下文章

PHP中使用cURL实现Get和Post请求的方法

在PHP中使用CURL实现GET和POST请求的方法

php使用cURL实现Get和Post请求的方法

PHP中使用cURL实现Get和Post请求的方法

如何在 PHP CURL 中从 POST 切换到 GET

CURL实现发送Get和Post请求(PHP)