首頁 後端開發 XML/RSS教程 詳解如何使用XMLHTTP傳送超長XML表單數據

詳解如何使用XMLHTTP傳送超長XML表單數據

Mar 27, 2017 pm 05:03 PM

在把大量的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

熱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

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

能否用PowerPoint開啟XML文件 能否用PowerPoint開啟XML文件 Feb 19, 2024 pm 09:06 PM

XML檔可以用PPT開啟嗎? XML,即可擴展標記語言(ExtensibleMarkupLanguage),是一種廣泛應用於資料交換和資料儲存的通用標記語言。與HTML相比,XML更加靈活,能夠定義自己的標籤和資料結構,使得資料的儲存和交換更加方便和統一。而PPT,即PowerPoint,是微軟公司開發的一種用於創建簡報的軟體。它提供了圖文並茂的方

Python中的XML資料轉換為CSV格式 Python中的XML資料轉換為CSV格式 Aug 11, 2023 pm 07:41 PM

Python中的XML資料轉換為CSV格式XML(ExtensibleMarkupLanguage)是一種可擴充標記語言,常用於資料的儲存與傳輸。而CSV(CommaSeparatedValues)則是一種以逗號分隔的文字檔案格式,常用於資料的匯入和匯出。在處理資料時,有時需要將XML資料轉換為CSV格式以便於分析和處理。 Python作為一種功能強大

使用Python處理XML中的錯誤和異常 使用Python處理XML中的錯誤和異常 Aug 08, 2023 pm 12:25 PM

使用Python處理XML中的錯誤和異常XML是一種常用的資料格式,用於儲存和表示結構化的資料。當我們使用Python處理XML時,有時可能會遇到一些錯誤和異常。在本篇文章中,我將介紹如何使用Python來處理XML中的錯誤和異常,並提供一些範例程式碼供參考。使用try-except語句捕捉XML解析錯誤當我們使用Python解析XML時,有時候可能會遇到一些

Python解析XML中的特殊字元和轉義序列 Python解析XML中的特殊字元和轉義序列 Aug 08, 2023 pm 12:46 PM

Python解析XML中的特殊字元和轉義序列XML(eXtensibleMarkupLanguage)是一種常用的資料交換格式,用於在不同系統之間傳輸和儲存資料。在處理XML檔案時,經常會遇到包含特殊字元和轉義序列的情況,這可能會導致解析錯誤或誤解資料。因此,在使用Python解析XML檔案時,我們需要了解如何處理這些特殊字元和轉義序列。一、特殊字元和

C#開發中如何處理XML和JSON資料格式 C#開發中如何處理XML和JSON資料格式 Oct 09, 2023 pm 06:15 PM

C#開發中如何處理XML和JSON資料格式,需要具體程式碼範例在現代軟體開發中,XML和JSON是廣泛應用的兩種資料格式。 XML(可擴展標記語言)是一種用於儲存和傳輸資料的標記語言,而JSON(JavaScript物件表示)是一種輕量級的資料交換格式。在C#開發中,我們經常需要處理和操作XML和JSON數據,本文將重點放在如何使用C#處理這兩種數據格式,並附上

使用Python實現XML中的資料校驗 使用Python實現XML中的資料校驗 Aug 10, 2023 pm 01:37 PM

使用Python實現XML中的資料校驗引言:在現實生活中,我們經常會處理各種各樣的數據,其中XML(可擴展標記語言)是一種常用的數據格式。 XML具有良好的可讀性和可擴充性,廣泛應用於各種領域,如資料交換、設定檔等。在處理XML資料時,我們經常需要對資料進行校驗,以確保資料的完整性和正確性。本文將介紹如何使用Python實現XML中的資料校驗,並給予對應的

如何使用 PHP 函數處理 XML 資料? 如何使用 PHP 函數處理 XML 資料? May 05, 2024 am 09:15 AM

使用PHPXML函數處理XML資料:解析XML資料:simplexml_load_file()和simplexml_load_string()載入XML檔案或字串。存取XML資料:利用SimpleXML物件的屬性和方法來取得元素名稱、屬性值和子元素。修改XML資料:使用addChild()和addAttribute()方法新增元素和屬性。序列化XML資料:asXML()方法將SimpleXML物件轉換為XML字串。實戰案例:解析產品饋送XML,提取產品信息,轉換並將其儲存到資料庫中。

在Java中使用Jackson函式庫將POJO轉換為XML? 在Java中使用Jackson函式庫將POJO轉換為XML? Sep 18, 2023 pm 02:21 PM

Jackson是一個基於Java的函式庫,它對於將Java物件轉換為JSON以及將JSON轉換為Java物件非常有用。 JacksonAPI比其他API更快,需要更少的記憶體區域,並且適合大型物件。我們使用XmlMapper類別的writeValueAsString()方法將POJO轉換為XML格式,並且需要將對應的POJO實例作為參數傳遞給此方法。語法publicStringwriteValueAsString(Objectvalue)throwsJsonProcessingException範例imp

See all articles