代码之家  ›  专栏  ›  技术社区  ›  Matthew

PHP-调试Curl

  •  185
  • Matthew  · 技术社区  · 14 年前

    我正在使用的PHP库(类)已经制作好了(不是我自己做的),所以我正在尝试理解它。

    curl_setopt() curl_exec()

    关于如何查看正在发送哪些post字段的想法?

    6 回复  |  直到 6 年前
        1
  •  182
  •   JamesG    7 年前

    您可以启用 CURLOPT_VERBOSE 选项:

    curl_setopt($curlhandle, CURLOPT_VERBOSE, true);
    

    什么时候? 设置,输出写入 斯特德尔 或使用指定的文件 CURLOPT_STDERR . 输出的信息非常丰富。

        2
  •  427
  •   Community datashaman    7 年前

    您可以启用 CURLOPT_VERBOSE 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";
    

    (我原来 answered similar but more extended 在一个相关的问题中。)

    curl_getinfo . 这些信息对于调试curl请求也很有用。作为一个使用示例,我通常会将其包装到一个函数中:

    $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;
    
        3
  •  64
  •   Mario S    10 年前

       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 )

        4
  •  31
  •   Sir l33tname Michael D    8 年前

    curl_setopt($curl, CURLOPT_VERBOSE, true);
    curl_setopt($curl, CURLOPT_STDERR, fopen('php://stderr', 'w'));
    
        5
  •  28
  •   Andrew    8 年前

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

    $response = curl_exec($ch);
    
    $info = curl_getinfo($ch);
    var_dump($info);
    
        6
  •  8
  •   Nick Spicer    5 年前

    如果您只想快速调试结果:

    $ch = curl_init();
    curl_exec($ch);
    $curl_error = curl_error($ch);
    echo "<script>console.log($curl_error);</script>"
    
        7
  •  1
  •   Serhii Andriichuk    5 年前

    将调试信息输出到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,
    ]);
    
    curl_exec($curlHandler);
    
    curl_close($curlHandler);
    

    $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);
    

    看到了吗 https://github.com/andriichuk/php-curl-cookbook#debug-request

        8
  •  0
  •   mario    6 年前

    nc -l -p 8000 -w 3 | tee curldbg.txt
    

    当然,向它发送失败的请求:

    curl_setup(CURLOPT_URL, "http://localhost/testytest");
    

    值得注意的是,它总是挂起+失败,因为netcat永远不会构造有效的HTTP响应。这真的只是为了检查真正送来的东西。当然,更好的选择是使用 http request debugging service .