如何通过 HTML 表单将 XML 发布到服务器?
Posted
技术标签:
【中文标题】如何通过 HTML 表单将 XML 发布到服务器?【英文标题】:How to post XML to server thru HTML form? 【发布时间】:2011-01-06 12:40:04 【问题描述】:我必须以 xml 格式将数据从我的 html 表单发布到服务器,例如:
<some_parameters>
<firstname>Homer</firstname>
<lastname>Simpson</lastname>
<street>74 Evergreen Tr.</street>
</some_parameters>
我所知道的是它用于在不同域上运行的 CRM 应用程序之一。现在我不确定什么是最好的方法。
当用户提交表单时,我只想在表单中包装字段的值。因此,如果用户在“名字”字段中键入“Homer”并单击提交,我的 JS 会将字段的值更改为<firstname>Homer</firstname>
,然后发布数据。
如果有帮助,我将在客户端使用 jQuery。我认为必须有更好的方法,因为我的解决方案会在禁用 JS 的情况下中断,而且看起来有点狡猾,所以如果你能指出我正确的方向,那就太棒了。
【问题讨论】:
为了有人帮助您,他们需要知道您在后端使用什么。 【参考方案1】:在没有 javascript 或浏览器插件的情况下发布 XML 是不可能的。发布 html 表单的两种可能格式是 application/x-www-form-urlencoded
和 multipart/form-data
。
【讨论】:
您的意思是 可能 代替不可能吗?【参考方案2】:我刚刚让它在 chrome 中工作,关键是文本区域名称中有空格:
<html>
<body>
<form action="http://target_webservice" method="post">
<textarea rows="20" cols="100" name=" ">
<?xml version="1.0"?><requestElements><blah></blah></requestElements>
</textarea>
<input type="submit" value="Submit">
</form>
</body>
</html>
【讨论】:
那仍然发布为 application/x-www-form-urlencoded【参考方案3】:我能想到的最好的方法是拦截表单提交动作,并将表单详细信息转换为 XML 格式,然后将其提交给服务器。有很多方法可以做到这一点,但最简单的方法是通过像 jQuery 这样的框架来实现解决方案:
可以在http://www.docunext.com/...data-to-xml-with-jquery 在线找到这方面的一个示例,它使用了JSON to XML Plugin:
$("#myform").submit(function()
var formjson = $('#myform').serializeArray();
var formxml = json2xml(formjson);
$.post("/collect.php", 'data': formxml , function(data)
// callback logic
);
return false;
);
【讨论】:
两个链接都失效了! @thomaskonrad 我已经修复了链接(通过在返回时重定向到档案)。可能某些下载和其他资源可能无法正常工作。如果您遇到任何其他问题,请告诉我。【参考方案4】:您可以使用XFORMS 发送 XML。例如见:http://www.mozilla.org/projects/xforms/
【讨论】:
+1 但据我所知,大多数浏览器都不支持此功能。 自 Gecko 19 (Firefox 19 / Thunderbird 19 / SeaMonkey 2.16) 起已过时【参考方案5】:如果服务器端代码是一个选项,您可以使用自定义 php CURL 脚本作为中间人,以实际 xml 格式将您的请求转发给第三方。我不确定 CURL 是否带有标准的 php 安装, 如果它不是一个选项,你可能会使用 fsocketopen 代替(虽然我个人认为这种策略更难)。但是 CURL 很容易安装,并且对于基本上允许 php 像浏览器一样发送请求非常有用。您可能在这里感兴趣的区别在于,它实际上允许您设置标题“Content-type: text/xml”。
所以让你的 html 表单发送一些常规的 GET 或 POST 值到你的 php 脚本。然后让该个人 php 脚本将它们转换为第 3 方期望的 XML 格式。 (不要忘记在它前面加上 <?xml version="1.0" encoding="ISO-8859-1"?>
标记,使用适合您的任何属性值。)然后通过以下代码将其发送出去:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xmlRequest);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-type: text/xml',
'Content-length: '.strlen($xmlRequest),
));
$output = curl_exec($ch);
curl_close($ch);
【讨论】:
以上是关于如何通过 HTML 表单将 XML 发布到服务器?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 ajax 调用将 html 表单数据发送到 node.js 服务器?
通过 XML HTTP 请求发布发送密码(启用 HTTPS)