2012-03-19 41 views
4

如何訪問客戶發佈到我的傳統ASP服務器的內容? 我知道有Request.Forms變量,但客戶端的請求不是使用Form進行的。 客戶端請求的主體只是一個使用標準POST語句創建的字符串。 謝謝使用經典ASP訪問請求的正文(從iOS客戶端發佈)?

+1

我想給你一個更完整的答案,也許清楚什麼可能是一個誤解,但首先我需要知道你的意思是「只使用標準的POST語句作出的字符串」..特別是因爲如果它是一個網頁,如果你沒有明確地在你的代碼中放入一個,瀏覽器會爲你填寫一個'

'。 – AnonJr 2012-03-19 18:57:26

+0

現在更新了答案,我知道我們正在處理iOS客戶端。用你試過的一些東西來更新你的問題將有助於@ Kul-Tigin,我會回答你的問題。 – AnonJr 2012-03-20 23:09:51

回答

18

如果客戶端發送的請求的內容類型不是表單數據,則需要讀取請求字節。在這種情況下,請求不是可通過名稱 - 值對訪問的表單數據,因此您無法使用Request.Form集合。我建議調查BinaryRead方法。

閱讀發佈的數據並將其轉換爲字符串:

If Request.TotalBytes > 0 Then 
    Dim lngBytesCount 
     lngBytesCount = Request.TotalBytes 
    Response.Write BytesToStr(Request.BinaryRead(lngBytesCount)) 
End If 

Function BytesToStr(bytes) 
    Dim Stream 
    Set Stream = Server.CreateObject("Adodb.Stream") 
     Stream.Type = 1 'adTypeBinary 
     Stream.Open 
     Stream.Write bytes 
     Stream.Position = 0 
     Stream.Type = 2 'adTypeText 
     Stream.Charset = "iso-8859-1" 
     BytesToStr = Stream.ReadText 
     Stream.Close 
    Set Stream = Nothing 
End Function 

希望它能幫助。

更新#1:

隨着使用JScript中

if(Request.TotalBytes > 0){ 
    var lngBytesCount = Request.TotalBytes 
    Response.Write(BytesToStr(Request.BinaryRead(lngBytesCount))) 
} 

function BytesToStr(bytes){ 
    var stream = Server.CreateObject("Adodb.Stream") 
     stream.type = 1 
     stream.open 
     stream.write(bytes) 
     stream.position = 0 
     stream.type = 2 
     stream.charset = "iso-8859-1" 
    var sOut = stream.readtext() 
     stream.close 
    return sOut 
} 
+0

非常感謝。我知道我的理解中缺少某些東西。我會調查你的解決方案。欣賞它。 – user798719 2012-03-19 20:15:42

+0

我很高興我能幫上忙。 – 2012-03-19 22:06:29

+0

嗨,我無法讓你的解決方案工作。你或者有人能告訴我這是如何在jscript中完成的嗎?掛斷位於Stream.Write字節中。口譯員表示正在等待「;」。我嘗試了在同一頁面上混合並匹配jscript和vbscript,但是並沒有太多。 – user798719 2012-03-20 18:49:05

0

在經典ASP中,Request.Form是用於通過POST發送的任何數據的集合。

爲了完整起見,我將補充說明Request.QueryString是用於通過GET /查詢字符串發送的任何數據的集合。

我猜想基於上述,即使客戶端不是一個Web瀏覽器,應該填充Request.Form集合。


注:所有這一切都是假設發送的數據是在本質上是文本,並且不存在任何二進制上傳(例如圖片或文件)發送。如果這是不正確的假設,請更新您的問題主體。


爲了測試,寫出來的原始形式的數據,看看你有什麼 - 沿着線的東西:

Response.Write(Request.Form) 

與正規的網頁將輸出類似

field=value&field2=value2 

如果你沿着這些方向得到了一些東西,那麼你可以用它作爲正確索引的參考。

如果你沒有得到那樣的東西,請更新你的問題與你試過什麼,你得到了什麼。

+0

謝謝你的幫助。 我的客戶端(ios)能夠在發佈到URL時基本設置請求主體。 [request setHTTPBody:requestData]; 客戶沒有使用表格或任何東西。從客戶端發送的有效載荷是一個字符串(儘管它被iOS封裝在一個NSData對象中)。所以我認爲POST的數據不必附加到Request.Form。因此我的困惑。 – user798719 2012-03-19 19:51:40

+0

這是否意味着我需要在從ios客戶端發佈時添加鍵值對?我沒有看到一旦它達到我的asp表單,我將如何訪問郵件正文 – user798719 2012-03-19 20:01:09

+0

非常感謝。我非常感謝你的幫助。 – user798719 2012-03-21 04:07:36

0

要獲得JSON字符串值,只需使用CStr(Request.Form)

作品一種享受。