通过CURL发布XML文件而不是访问网址

时间:2011-07-21 08:14:54

标签: php xml cakephp

当我将XML内容从一台服务器发布到其他服务器时,它没有被添加。 我正在使用cURL将xml文件发布到另一台服务器。但是我收到了以下回复:

HTTP/1.1 200 OK
Date: Thu, 21 Jul 2011 08:13:02 GMT
Server: Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.6 with Suhosin-Patch mod_ssl/2.2.8 OpenSSL/0.9.8g
X-Powered-By: PHP/5.2.4-2ubuntu5.6
Set-Cookie: PHPSESSID=6846cb7e65f6f6d6d87f163a681f0543; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 5721
Content-Type: text/html; charset=UTF-8

这是我的代码

$file_path= WWW_ROOT.$xmlfilename;          
$xmldata = file_get_contents($file_path);
$request = 'http://www.sample.com/someaction';
$postargs = 'xml='.urlencode($xmldata).'&filename='.urlencode($xmlfilename);

// Get the curl session object
$session = curl_init($request);

// Set the POST options.
curl_setopt($session, CURLOPT_POST, true);
curl_setopt($session, CURLOPT_POSTFIELDS, $postargs);
curl_setopt($session, CURLOPT_HEADER, true);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);

// Do the POST and then close the session
$response = curl_exec($session);
print_r( $response);

注意:两个服务器都启用了allow_url_fopen和curl。

1 个答案:

答案 0 :(得分:2)

尝试像这样分配:

$ postargs = array('xml'=> urlencode($ xmldata),'filename'=> urlencode($ xmlfilename))

这两个项目应该出现在接收方的$ _POST ['xml']和$ _POST ['filename']中(如果不是PHP,则显示在等效内容中)。

修改

好的,您可能需要使用CURLOPT_READFUNCTION查看流式传输XML文件。

请参阅此示例以获取一些示例http://zingaburga.com/2011/02/streaming-post-data-through-php-curl-using-curlopt_readfunction/