Php – debuggingcurl

我希望在发送请求之前查看请求中的post字段。 (为了debugging目的)。

我正在使用的PHP库(类)已经(不是由我),所以我试图了解它。

据我所知,它使用curl_setopt()设置不同的选项,如标题等,然后它使用curl_exec()发送请求。

想法如何看到什么职位领域正在发送?

您可以启用CURLOPT_VERBOSE选项:

 curl_setopt($curlhandle, CURLOPT_VERBOSE, true); 

CURLOPT_VERBOSE被设置时,输出被写入STDERR或使用CURLOPT_STDERR指定的文件。 输出是非常丰富的。

您也可以使用tcpdump或wireshark观看networkingstream量。

您可以启用CURLOPT_VERBOSE选项并将该信息logging到(临时) CURLOPT_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"; 

(我原来的回答类似,但在相关的问题上更加延伸 。)

更多关于最后一个请求的度量信息可以通过curl_getinfo 。 这些信息也可以用于debuggingcurl请求。 一个用法示例,我通常会将其包装到一个函数中:

 $version = curl_version(); extract(curl_getinfo($handle)); $metrics = <<<EOD URL....: $url Code...: $http_code ($redirect_count redirect(s) in $redirect_time secs) Content: $content_type Size: $download_content_length (Own: $size_download) Filetime: $filetime Time...: $total_time Start @ $starttransfer_time (DNS: $namelookup_time Connect: $connect_time Request: $pretransfer_time) Speed..: Down: $speed_download (avg.) Up: $speed_upload (avg.) Curl...: v{$version['version']} EOD; 

这是一个简单的代码相同:

  curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_STDERR, $fp); 

其中$ fp是输出错误的文件句柄。 例如:

  $fp = fopen(dirname(__FILE__).'/errorlog.txt', 'w'); 

(请阅读http://curl.haxx.se/mail/curlphp-2008-03/0064.html

这是一个更简单的方法,直接写入php错误输出

 curl_setopt($curl, CURLOPT_VERBOSE, true); curl_setopt($curl, CURLOPT_STDERR, fopen('php://stderr', 'w')); 

要获取CURL请求的信息,请执行以下操作:

 $response = curl_exec($ch); $info = curl_getinfo($ch); var_dump($info);