获取Curl生成的POST流示例,以帮助移植到c#

本文关键字:帮助 Curl POST 获取 | 更新日期: 2023-09-27 18:12:05

我的任务是将以下PHP代码块转换为执行HTTP多部分帖子。我了解HTTP发布的基础知识(我的代码已经发布了一些JSON),并且我已经阅读了多部分请求的基础知识。然而,Curl显然在幕后做了大量的腿部工作,这些工作将不得不转换为。net流写入。然而,对于这些事情,细节决定成败。

不熟悉Curl和作为一个PHP新手,有没有一种方法,使用代码,看到最后发送的请求与curl_exec?有一个真实的例子会很有帮助。事实上,我对简单的字段很满意-每个字段都有单独的边界/部分。JPEG图像编码对我来说比较棘手。我可以设置一个PHP环境并调试它吗?我推断Curl是一种web客户端,也就是说,它做了很多没有用户界面的web浏览器所做的事情。

<?php
    function AddPhoto( $account, $password, $pubId, $photoId, $owner, $pubDate, $attribution, $caption, $keywords, $photoPath )
    {
        // set up the arguments of the multipart form data
        $args = array( 'Method' => 'AddPhoto', 'Account' => 'Test', 'Password' => 'pw', 
                      'PubID' => 'WOR/1002',
                      'PhotoID' => '12345',
                      'Owner' => 'me',
                      'PubDate' => '2015-07-01',
                      'Attribution' => '',
                      'Caption' => 'the front door',
                      'Keywords' => 'Pub',
                      'Photo' => new CurlFile( $photoPath,              // path to the file
                                                'image/jpeg',               // MIME type of the file
                                                'image'                     // file name (not used)
                                             )
                    );
        // create a curl request object
        $ch = curl_init();
        curl_setopt ($ch, CURLOPT_URL, 'http://dev.camrapubs.org.uk/simon/PubDatabase/API2.php');
        curl_setopt( $ch, CURLOPT_POST, 1 );                // use the POST method
        curl_setopt( $ch, CURLOPT_POSTFIELDS, $args );      // supply the arguments for the POST
        curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );      // ensure curl_exec returns the result rather than echoing it
        // make the call and get the result
       return curl_exec($ch);
    }
    $result = AddPhoto( ‘xx', ‘xx', 'WOR/1002', '12345', 'me', '2015-07-01', 'copyleft', 'The front door', 'Pub', 'sample.jpg' );
    echo 'result = ', $result, PHP_EOL;
?>

获取Curl生成的POST流示例,以帮助移植到c#

Rob,

也许你应该看看这个?

Php -调试Curl

祝你成功:-)

该链接给出了答案的第一部分,因为您可以使用详细选项和错误输出管道调试Curl请求。

然而,遗憾的是,Curl中的verbose选项没有在日志中显示多部分请求,所以我正在寻找的关键位丢失了。

但是这个链接确实把我带到了另一条尝试捕获低级请求的路线上。Wireshark有点低级,但另一次跳转让我发现了非常有用的Charles Proxy实用程序。如果你需要调试HTTP post请求,这是一个很棒的软件。

您必须手动配置您的CURL代码来使用查尔斯代理,使用以下行:

curl_setopt( $ch, CURLOPT_PROXY, "127.0.0.1:8888");

但是一旦配置好了,您就可以在一组优秀的Charles诊断窗口中浏览请求和响应。

这节省了我数小时的猜测。我可以看到POST数据的所有荣耀