PHP-调试Curl
在发送请求之前,我想查看请求中的post字段。(用于调试目的) 我正在使用的PHP库(类)已经制作好了(不是我自己制作的),所以我试图理解它 据我所知,它使用PHP-调试Curl,php,debugging,curl,Php,Debugging,Curl,在发送请求之前,我想查看请求中的post字段。(用于调试目的) 我正在使用的PHP库(类)已经制作好了(不是我自己制作的),所以我试图理解它 据我所知,它使用curl\u setopt()来设置不同的选项,如头等等,然后使用curl\u exec()来发送请求 如何查看发送的帖子字段?您可以启用CURLOPT\u VERBOSE选项: curl_setopt($curlhandle, CURLOPT_VERBOSE, true); 设置CURLOPT\u VERBOSE时,输出将写入STDER
curl\u setopt()
来设置不同的选项,如头等等,然后使用curl\u exec()
来发送请求
如何查看发送的帖子字段?您可以启用
CURLOPT\u VERBOSE
选项:
curl_setopt($curlhandle, CURLOPT_VERBOSE, true);
设置CURLOPT\u VERBOSE
时,输出将写入STDERR或使用CURLOPT\u STDERR
指定的文件。输出的信息非常丰富
您还可以使用tcpdump或wireshark监视网络流量。您可以启用
CURLOPT\u VERBOSE
选项,并将该信息记录到(临时)CURLOPT\u STDERR
:
// CURLOPT_VERBOSE: TRUE to output verbose information. Writes output to STDERR,
// or the file specified using CURLOPT_STDERR.
curl_setopt($handle, CURLOPT_VERBOSE, true);
$verbose = fopen('php://temp', 'w+');
curl_setopt($handle, CURLOPT_STDERR, $verbose);
然后,您可以在curl完成请求后读取它:
$result = curl_exec($handle);
if ($result === FALSE) {
printf("cUrl error (#%d): %s<br>\n", curl_errno($handle),
htmlspecialchars(curl_error($handle)));
}
rewind($verbose);
$verboseLog = stream_get_contents($verbose);
echo "Verbose information:\n<pre>", htmlspecialchars($verboseLog), "</pre>\n";
下面是一个更简单的代码:
$fp = fopen(dirname(__FILE__).'/errorlog.txt', 'w');
其中,$fp是输出错误的文件句柄。例如:
curl_setopt($curl, CURLOPT_VERBOSE, true);
curl_setopt($curl, CURLOPT_STDERR, fopen('php://stderr', 'w'));
(继续阅读)这里有一种更简单的方法,直接写入php错误输出
$response = curl_exec($ch);
$info = curl_getinfo($ch);
var_dump($info);
要仅获取CURL请求的信息,请执行以下操作:
nc -l -p 8000 -w 3 | tee curldbg.txt
另一个(粗略的)选项是利用netcat转储完整请求:
curl_setup(CURLOPT_URL, "http://localhost/testytest");
当然,向它发送失败的请求:
$curlHandler = curl_init();
curl_setopt_array($curlHandler, [
CURLOPT_URL => 'https://postman-echo.com/get?foo=bar',
CURLOPT_RETURNTRANSFER => true,
/**
* Specify debug option
*/
CURLOPT_VERBOSE => true,
]);
curl_exec($curlHandler);
curl_close($curlHandler);
值得注意的是,这将总是挂起+失败,因为netcat永远不会构造有效的HTTP响应。这真的只是为了检查真正发送的内容。当然,更好的选择是使用。将调试信息输出到STDERR:
$curlHandler = curl_init();
curl_setopt_array($curlHandler, [
CURLOPT_URL => 'https://postman-echo.com/get?foo=bar',
CURLOPT_RETURNTRANSFER => true,
/**
* Specify debug option.
*/
CURLOPT_VERBOSE => true,
/**
* Specify log file.
* Make sure that the folder is writable.
*/
CURLOPT_STDERR => fopen('./curl.log', 'w+'),
]);
curl_exec($curlHandler);
curl_close($curlHandler);
将调试信息输出到文件:
$ch = curl_init();
curl_exec($ch);
$curl_error = curl_error($ch);
echo "<script>console.log($curl_error);</script>"
如果您只想快速调试结果,请参见:
$ch=curl_init();
curl_exec($ch);
$curl\u error=curl\u error($ch);
echo“console.log($curl_error);”
另请参见。值得注意的是,如果将CURLINFO\u HEADER\u OUT
设置为TRUE
,则此操作将不起作用。据我所知…比工作$info=curl_getinfo($curlhandle);-我自己的评论)fopen选项应该是“w+”@iisisrael:你说得对。更正。感谢您的提示。但是,在开始调试之前:请尝试检查apache日志,以防抛出错误(例如没有安装curl php,因此函数失败!),因为“after”响应curl_getinfo它很好,但是对于格式错误的URL,例如getinfo返回non-info,opt CURLOPTëu VERBOSE是一个更好的例子,我本想使用@Michaël-R的答案,但我在PHP日志中没有得到详细的答案。像这样登录到一个新文件是有效的。
$curlHandler = curl_init();
curl_setopt_array($curlHandler, [
CURLOPT_URL => 'https://postman-echo.com/get?foo=bar',
CURLOPT_RETURNTRANSFER => true,
/**
* Specify debug option.
*/
CURLOPT_VERBOSE => true,
/**
* Specify log file.
* Make sure that the folder is writable.
*/
CURLOPT_STDERR => fopen('./curl.log', 'w+'),
]);
curl_exec($curlHandler);
curl_close($curlHandler);
$ch = curl_init();
curl_exec($ch);
$curl_error = curl_error($ch);
echo "<script>console.log($curl_error);</script>"