使用经典ASP访问请求的正文?

时间:2012-03-19 18:06:27

标签: json post asp-classic request

如何访问客户端发布到我的经典ASP服务器的内容? 我知道有Request.Forms变量,但客户端的请求不是使用Form。 客户端请求的正文只是使用标准POST语句创建的字符串。 感谢

3 个答案:

答案 0 :(得分:20)

如果客户端发送的请求的内容类型不是表单数据,则需要读取请求字节。在这种情况下,请求不是可通过名称 - 值对访问的表单数据,因此您无法使用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
}

答案 1 :(得分:2)

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

努力享受。

答案 2 :(得分:1)

在Classic ASP中,Request.Form是用于通过POST发送的任何数据的集合。

为了完整起见,我将补充说Request.QueryString是用于通过GET /查询字符串发送的任何数据的集合。

基于上述情况我猜测即使客户端不是Web浏览器,也应该填充Request.Form集合。


注意:所有这些都假设正在发送的数据本质上是文本的,并且没有发送二进制上载(例如图片或文件)。如果这是一个不正确的假设,请更新您的问题正文。


要测试,请写出原始表单数据并查看您拥有的内容 - 以下内容:

Response.Write(Request.Form)

使用常规网页会输出类似

的内容
field=value&field2=value2

如果你沿着这些方向得到了某些东西,那么你可以将它作为正确索引的参考。

如果你没有得到类似的东西,请用你尝试的和你得到的东西更新你的问题。