我一直在嘗試兩天來設置符合第三方提供程序要求的端點。他們將通過HTTPS POST向我們發送關於業務對象狀態的最新信息,請求內容將爲JSON。不幸的是,它現在必須用VBScript編寫。使用傳統ASP VBScript時無法獲取原始POST數據
目前,我無法獲得他們發送給我的請求的原始內容,所以我無法處理它。
我已經創建了一個簡單的終端(raw-form.asp)和兩個測試頁來演示這個問題。首先,我使用HTML表單設置了一個簡單的測試HTML頁面(raw-form-test1.asp),並且它可以正常工作。第二個測試頁面(raw-form-test2.asp)使用WinHttpRequest
將內容發送到端點。當使用這個時,數據不在那裏。我試圖通過Request.Body
獲取它。
原始形式-ASP:
<%
Dim post : post = Request.Body
Response.ContentType = "text/plain"
Response.Write "Your " & Request.ServerVariables("REQUEST_METHOD") & " data was: " & post
%>
原始外形test1.asp:
<!DOCTYPE html>
<html>
<body>
<form action="raw-form.asp" method="post">
<p><textarea name="data"></textarea></p>
<p><input type="submit"></p>
</form>
</body>
</html>
原始外形test2.asp:
<%
Dim data : data = Request.Form("data")
Dim resp : resp = ""
If data <> "" Then
Dim http : Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
http.Open "post", "http://localhost:8080/raw-form.asp"
http.Send data
http.WaitForResponse(10)
resp = http.Status & " | " & http.ResponseText
End If
%>
<!DOCTYPE html>
<html>
<body>
<%= Server.HTMLEncode(resp) %>
<form action="raw-form-test2.asp" method="post">
<p><textarea name="data"></textarea></p>
<p><input type="submit"></p>
</form>
</body>
</html>
在填充在一些隨機文本和提交第一個測試,響應正文如我所料:
Your POST data was: data=abc
在使用第二次測試,在resp
返回的結果是:
200 | Your POST data was:
我還試圖用Request.BinaryRead()
沒有成功(VBScript中獲得獲得它的長度,而不是內容 - 可能只是VB類型的可怕)。我希望有另一種方式來獲取數據。
根據第三方端點的設置方式,我不希望POST請求返回的結果不是'HTTP 200 OK'或更好的結果'HTTP 201 Created'。確定要返回的內容的唯一方法是在測試代碼時運行Fiddler。大多數*(不是全部)*基於HTTP的端點使用RESTful設計原則,閱讀這些原則可能會幫助您理解爲什麼除了'HTTP 200 OK'之外什麼都看不到。它可能在你沒有看到的響應中有一個「位置」標題,因爲你正在嘗試檢查正文。 – Lankymart
這可能是有趣的*(假設它是RESTful)* - [瞭解REST:動詞,錯誤代碼和身份驗證](// stackoverflow.com/a/2022938) – Lankymart
我剛剛意識到您的示例並不是說到第三方端點時,忽略我所說的問題可能是您在'raw-form-test2.asp'中調用了'Request.Form(「data」)'但是它假設來自哪裏?當然,你只是想要一些測試數據一串或什麼?如果通過表單提交調用該頁面,則只會在Request.Form中獲取某些內容。 – Lankymart