我使用下面的代码将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来完成它。
答案 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));