我编写了一个PHP脚本,将XML发布到我的服务器上:
$xml_request='<?xml version="1.0"?><request><data></data></request>';
$url='http://www.myserver.com/xml_request.php';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 4);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_request);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: close'));
$result = curl_exec($ch);
curl_close($ch);我正在试图找出如何在服务器端解析该请求。如果我这么做:
print_r($_POST);它返回:
Array
(
[<?xml_version] => \"1.0\"?><request><data></data></request>
)我希望能够将帖子传递给XML解析器之一。例如,simplexml_load_string()。我需要访问干净的XML文件。如何访问POST请求才能获得干净的文件?
发布于 2009-09-15 02:08:49
问题在于发布请求的脚本。在将XML字符串发送到服务器之前,需要对其进行编码,以防止服务器解析XML字符串。在将XML发布到服务器之前,尝试通过rawurlencode运行XML。
再看一看,我发现了另一个问题。看起来,CURLOPT_POSTFIELDS选项希望您自己来形成字符串。Quoth 手册页 (粗体是我的):
在HTTP " post“操作中发布的完整数据。若要发布文件,请在文件名前面加上@并使用完整路径。--它既可以作为像‘para1=val1¶2=val2¶.’这样的urlencoded字符串传递。或者是以字段名为键,字段数据为值的数组。如果值是数组,则内容类型标头将设置为多部分/表单数据。
所以在你的情况下,你会觉得
curl_setopt($ch, CURLOPT_POSTFIELDS, 'xmlstring='.rawurlencode($xml_request))然后,在您的接收脚本中,您希望能够以$_POST‘’xmlstring‘的形式访问它。
发布于 2014-08-07 20:58:00
php://input 允许您在PHP.中读取原始的POST数据。
例如,:
在客户端:
<?php
$ch = curl_init();
$file = file_get_contents("stuff.xml");
$url = "http://traalala.com/foobar";
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$file);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT ,3);
curl_setopt($ch,CURLOPT_TIMEOUT, 20);
$response = curl_exec($ch);
print "curl response is:" . $response;
curl_close ($ch);
?>在服务器端的控制器中:
$post = file_get_contents("php://input");
print $post;从柱子上开火,控制器抓取post数据。
按照stuff.xml中的定义,打印到屏幕上的XML输出是干净的。
https://stackoverflow.com/questions/1424594
复制相似问题