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

标签 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 和其他 post 参数吗?

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

最佳答案

我看不出这个脚本有什么问题。这很可能是 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));

关于php - 如何在 PHP 中通过 cURL 发送 XML 和其他 post 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2697535/

相关文章:

php - 使用 jQuery 检查表单输入值的问题

html - `<seg>` 和 `<span>` 有什么区别

XML 回车编码

Python 和 Youtube Api

php - 如何在 PHP cURL 请求中将 OData 发送到 RESTful API

php - 有限制的结果总数

javascript - jquery ajax 在 str.replace 后不工作

基于 PHP 的可打印版本

java - 如何防止在java xml签名和证书中添加空格?

python - 如何加载维基百科文章的旧(修订)内容