搜索
首页后端开发XML/RSS教程详解如何使用XMLHTTP发送超长XML表单数据

在把大量的XML作为POST数据的一部分发送给你的IIS服务器的时候——诸如在ASP表单的TEXTAREA里——你可能会得到一些没有预料到的结果。当数据在服务器上被处理的时候,由于你处理数据方式的不同,你最终可能会碰到错误。其原因是,当你把数据提交回服务器的时候,POST字段里有一个(数据)大小的限制。这样做的目的是为了防止可能的入侵者在实施拒绝服务(denial of service,DoS)的攻击中向服务器发送超大量的数据。

这一限制也束缚你的能力。但是有办法解决这个问题。如果你没被限制在只能够通过FORM提交来发送数据,那么你就可以使用XMLHTTP对象(微软的XML集里的一个DOM对象)来发送所需要的XML:

var oXMLHTTP = new ActiveXObject("Microsoft.XMLHTTP");
oXMLHTTP.open("POST", "xml_handler.asp", false);
oXMLHTTP.send(xml_to_send);

由于Request对象会实现IStream接口,所以你可以通过使用DOMDocument对象的load()方法来加载所要提交的XML:

Dim oDOM
Set oDOM = Server.CreateObject("MSXML2.DOMDocument")
oDOM.load Request

如果你被限制在只能够使用FORM提交,那么你可以通过提交多个TEXTAREA或者INPUT来跨越这一限制,前面两者在服务器一接收到这个FORM数据的时候就可以被重新组合在一起:

var MAXLEN = 90000;
var oForm = document.createElement("FORM");
oFORM.method = "POST";
oFORM.action = "xml_handler.asp";
oFORM = document.body.appendChild(oFORM);
var s = document.someForm.txtXML.value;
if (s.length > MAXLEN) {
   while (s.length > MAXLEN) {
     var o = document.createElement("INPUT");
     o.type = "hidden";
     o.name = "txtXML";
     o.value = s.substr(0, MAXLEN);
     oFORM.appendChild(o);
     s = s.substr(MAXLEN);
   }
   var o = document.createElement("INPUT");
   o.type = "hidden";
   o.name = "txtXML";
   o.value = s.substr(0, MAXLEN);
   oFORM.appendChild(o);
} else {
   var o = document.createElement("INPUT");
   o.type = "hidden";
   o.name = "txtXML";
   o.value = s;
   oFORM.appendChild(o);
}

这一段代码会创建一个新的FORM元素,用来处理数据的提交,并将它放置到BODY元素内。然后,它会检查即将提交给服务器的XML的长度。这个XML驻留在someForm内部一个叫做txtXML的TEXTAREA里。

如果这个XML大于90,000字符的MAXLEN,那么这段代码就会创建多个隐藏的INPUT(输入)元素,并把值的属性设置为90,000个字符的XML数据,或者设置为XML尾部的某个值,从而将这个数据分割成多个部分。如果这个XML的大小小于MAXLEN,那么这段代码就只会创建一个INPUT并相应地设置值。然后这个数据就被提交到服务器供处理。

你可能已经注意到,我把相同的名称——txtXML——指定给新表单的每个字段。这将有助于把XML数据同其他可能会被提交的数据分隔开来,并为重组XML数据提供了一种简单的方式。在重组数据的时候,你需要一个简单的循环来连接字段里的数据:

Dim str, fld
For Each fld In Request.Form("txtXML")
   str = str & fld
Next

由于已经为每个FORM元素都创建了一个字段集,所以你可以在同一个名称的字段里迭代。只要以适当的顺序在客户端创建FORM元素,你就不需要担心字段被遍历的顺序。通过FORM的appendChild()方法,这能够被轻易地实现。

数据在客户端是按照从左到右、从上到下的顺序被提交的,所以当你把INPUT元素附加到FORM元素尾部的时候,在你服务端也总是按照同样的顺序来接收数据的。

如果你正在寻求实现一个大型的数据解决方案,例如将大量的Excel数据从客户机器传递到服务器上,那么你就应该重新考虑是否要使用FORM提交,或者将数据从逻辑上分成多个小的部分。由于你无法使用文件类型INPUT元素,所以最具有创造力的解决方案是将数据在本地转变成为XML,再将XML数据提交给服务器。反过来,数据会保存在服务器上,直到需要更进一步处理。

当然,处理这个问题可能会有更好的方法。但是当你没有太多时间的时候,你所需要的就是一个快速的、可用的解决方案。

以上是详解如何使用XMLHTTP发送超长XML表单数据的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
python怎么读取xml文件python怎么读取xml文件May 16, 2025 am 11:09 AM

用Python读取XML文件的方法包括:1.使用xml.etree.ElementTree库进行基本解析;2.使用lxml库和XPath表达式进行高级解析。通过这些方法,可以高效地处理和提取XML文件中的数据。

xml 怎么转换成表格xml 怎么转换成表格May 16, 2025 am 11:06 AM

将XML数据转换成表格可以通过以下步骤实现:1.解析XML文件,2.将数据映射到表格结构,3.生成表格数据。使用Python的xml.etree.ElementTree和pandas库可以轻松实现这一转换过程。

xml怎么格式化文件xml怎么格式化文件May 16, 2025 am 11:03 AM

格式化XML文件的原因是提高人类的阅读和维护效率。1.手动格式化效率低且易出错。2.自动化工具如Notepad 和VisualStudioCode能快速整理XML文件。3.使用Python的xml.dom.minidom模块可以简单格式化XML字符串,但需注意可能添加额外空白节点。

xml视须文件怎么打开xml视须文件怎么打开May 16, 2025 am 11:00 AM

.xsm文件是一种XMLSchema文件,用于定义XML文件的结构和约束。1)使用文本编辑器如Notepad 或VisualStudioCode打开.xsm文件。2)对于高级功能,使用OxygenXMLEditor或AltovaXMLSpy进行Schema验证和自动补全。3)通过Python的lxml库,可以验证XML文件是否符合Schema,并使用流式处理优化大型文件的处理性能。

微信中发送的xml怎么打开微信中发送的xml怎么打开May 16, 2025 am 10:57 AM

微信中发送的XML文件可以通过以下步骤打开和处理:1.从微信中提取XML文件:长按文件,选择“保存到手机”或“下载”。2.在不同设备上打开文件:在Windows上使用浏览器或Notepad ,在Mac上使用浏览器或TextEdit,在iOS上使用“文件”应用,在Android上使用“文件管理器”或XML查看器应用。3.理解和使用XML文件内容:通过浏览器或文本编辑器查看文件内容,必要时使用编程语言如Python进行解析和修改。

xml文件是什么怎么操作xml文件是什么怎么操作May 16, 2025 am 10:54 AM

XML文件的核心作用是存储和传输结构化数据。1)解析XML文件可使用DOM或SAX方法,DOM适合小文件,SAX适合大文件。2)生成XML文件可通过DOM或直接编写。3)处理命名空间时,使用命名空间前缀避免标签冲突。4)调试时,使用验证工具和异常处理。5)优化时,使用SAX解析器和缓存机制。

xlsx怎么转换成xmlxlsx怎么转换成xmlMay 16, 2025 am 10:51 AM

使用Python可以将xlsx文件转换为xml文件。1)使用openpyxl库读取xlsx文件,2)使用xml.etree.ElementTree库创建和写入xml文件,3)遍历xlsx文件中的数据并填充到xml结构中,4)处理可能遇到的编码、数据类型和缺失值问题。

发票怎么转换成xml发票怎么转换成xmlMay 16, 2025 am 10:48 AM

将发票转换成XML格式可以通过以下步骤实现:1.数据解析:从发票中提取相关信息。2.数据映射:将提取的数据映射到XML结构中。3.XML生成:使用Python的xml.etree.ElementTree模块生成XML文件,这一过程包括逐步构建XML树结构并写入文件。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。