繁体   English   中英

如何在PHP中发出HTTP POST XML请求实际上将XML数据发送到供应商的服务器?

[英]How to make my HTTP POST XML request in PHP actually send XML data to my vendor's Server?

我正在处理一些PHP代码,该代码将生成一个动态XML输出,我希望将该输出通过HTTP POST到供应商的服务器。

我的主要目标是使我的商品库存水平与供应商的库存水平同步,并且当我将请求发布为输入时,我应该从他们的服务器获取输出。

我正在使用DOMDocument创建xml字符串,到目前为止,这是没有问题的,它可以正常工作。

但是,当我尝试使用“ cUrl”方法或“ file_get_contents()”方法进行HTTP POST时。 建立了连接,但是服务器响应是一个错误,提示“ HTTP POST中未接收到XML”。

我只是使用标准代码,如本文所述, 使用HTTP POST和PHP发送XML数据就像许多其他文章介绍了这两种方法一样。

cUrl方法:

$post_data = //the raw xml string or XML file from the DOMDocument.

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://websiteURL");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$content=curl_exec($ch);

或file_get_contents()方法:

$stream_options = array(
'http' => array(
    'method'  => 'POST',
    'header'  => 'Content-type: application/x-www-form-urlencoded' . "\r\n",
    'content' =>  $post_data));

$context  = stream_context_create($stream_options);
$response = file_get_contents($url, null, $context);

两种方法都给我一个服务器响应,即“ HTTP POST中未接收到XML”。

如果我print_r($ post_data); 它显示了我要发送的xml字符串。 喜欢:

1. <?xml version="1.0" encoding="UTF-8"?> 
2. <pnarequest><customer.nr>some no.</customer_nr><password>some no.</password><Item><vare_nr>some sku no.</vare_nr>

新资讯:

我的供应商说他们收到了我的HTTP POST,但是帖子中的内容是纯文本形式的变量“ $ post_data”,而不是变量中的内容。

有人可以帮我理解为什么不发布XML数据吗?

谢谢。

我的问题的答案:我需要在帖子中创建键“ xml =“,并将我的xml($ Post_data)作为变量。 另外,我还需要从供应商那里获取正确的用户信息,并将其放入xml变量中。 现在可以了! -感谢所有对此问题发表评论的人。

似乎您没有对发布数据进行编码,并且尚未为XML字段定义变量名。 由于您正在使用post,因此此处的HTTP请求应看起来像是从具有单个textarea的表单发送的请求。

<?php

$post_data = rawurlencode($post_data);   
curl_setopt($ch, CURLOPT_POSTFIELDS, 'xml=' . $post_data);

?>

如果需要在POST数据中包含更多变量。

<?php

$key = '12345';

$post_data =
    'xml=' . rawurlencode($post_data) .
    '&key=' . rawurlencode($key);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);

?>

这是我为您提供的最后一个示例代码。 您没有使用键和值正确发布。 您说您已经使用了另一个问题中的示例curl代码,只是您没有使用它,因为它们清楚地在接受的答案中使用了键和值,而您没有使用。 另外,我只是检查了网站上可用的表格。 正如我所期望的那样,键名应该是“ xml”,并且正如我所期望的那样,帖子看起来应该像是具有单个textarea的表单。

<?php

$xml = '<?xml version="1.0"...';

$post_data =
    'xml=' . rawurlencode($post_data) .
    '&key=' . rawurlencode($key);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://websiteURL");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$content=curl_exec($ch);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM