如何在PHP中通过cURL发送XML和其他post参数

时间:2010-04-23 09:39:14

标签: php xml api rest curl

我使用下面的代码将XML发送到我的REST API。 $ xml_string_data包含适当的XML,并且很好地传递给mypi.php:

    //set POST variables
    $url = 'http://www.server.cu/mypi.php'; 
    $fields = array(
                'data'=>urlencode($xml_string_data)
            );

    //url-ify the data for the POST
    $fields_string = "";
    foreach($fields as $key=>$value) 
    { 
      $fields_string .= $key.'='.$value.'&'; 
    }
    rtrim($fields_string,'&');

    echo $fields_string;

    //open connection
    $ch = curl_init();

    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch,CURLOPT_POST,count($fields));
    curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
    curl_setopt($ch,CURLOPT_HTTPHEADER,array (
        "Expect: "
    ));

    //execute post
    $result = @curl_exec($ch);

但是当我添加其他字段时:

    $fields = array(
      'method' => "methodGoPay",
      'data'=>urlencode($xml_string_data)
    );

停止工作了。在mypi.php上我根本没有收到任何POST参数!

请问您能告诉我如何在一个cURL请求中发送XML和其他帖子参数?

请不要建议使用任何库,我不想用普通的PHP来完成它。

1 个答案:

答案 0 :(得分:3)

我没有看到这个脚本有什么问题。这很可能是mypi.php的一个问题。

你确实有额外的&在末尾。也许这会混淆服务器? rtrim不会更改$ field_string并返回修剪后的字符串。

可以像这样简化后场,

$fields = array(
      'method' => "methodGoPay",
      'data'=> $xml_string_data // No encode here
);

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields));
相关问题