Accessing a request's body using classic ASP?
Solution 1
You need to read request bytes if content type of request sent by client is not form data. In this case, request is not a form-data that is accessible through name-value pairs so you cannot use Request.Form collection. I suggest investigate the BinaryRead method.
Reading posted data and convert into string :
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
Hope it helps.
Update #1:
With using 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
}
Solution 2
To get the JSON string value just use CStr(Request.Form)
Works a treat.
Solution 3
In Classic ASP, Request.Form
is the collection used for any data sent via POST.
For the sake of completeness, I'll add that Request.QueryString
is the collection used for any data sent via GET/the Query String.
I would guess based on the above that even though the client is not a web browser, the Request.Form collection should be populated.
note: all of this is assuming the data being sent is textual in nature, and that there are no binary uploads (e.g. pictures or files) being sent. Update your question body if this is an incorrect assumption.
To test, write out the raw form data and see what you have - something along the lines of:
Response.Write(Request.Form)
Which with a regular web page will output something like
field=value&field2=value2
If you get something along those lines, you could then use that as a reference for a proper index.
If you do not get something like that, update your question with what you tried and what you got.
user798719
Some questions may end up being dumb, but if I ask it, it's not dumb to me.
Updated on July 22, 2022Comments
-
user798719 almost 2 years
How do I access what has been posted by a client to my classic ASP server? I know that there is the Request.Forms variable, but the client's request was not made using a Form. The client request's body is just a string made using a standard POST statement. Thanks
-
user798719 about 12 yearsThank you for your help. My client (ios)is able to basically set a request body when POSTing to a URL. [request setHTTPBody:requestData]; The client wasn't using a form or anything. The payload being sent from the client is a String (although it's wrapped in an NSData object by iOS) So I thought that POSTed data did not have to be attached to Request.Form. Hence my confusion.
-
user798719 about 12 yearsDoes this mean that I need to add key-value pair when POSTing from the ios client? I don't see how I'd access the message body once it has reached my asp form
-
user798719 about 12 yearsThank you very much. I knew something was missing from my understanding. I will investigate your solution. Appreciate it.
-
user798719 about 12 yearsHi, I could not get your solution to work. Could you or someone show me how this is done in jscript? The hang up is in Stream.Write bytes. The interpreter indicates that it is expecting a ";". I tried mixing and matching jscript and vbscript on the same page but didn't get very far.
-
user798719 about 12 yearsThank you very much. I really appreciate your help.
-
user798719 about 12 yearsThanks so much for taking the time to help a total stranger. You are great! (and your solution works)
-
emen over 10 yearsHey, soz for bumping old thread. Can you please point for me where to call the JSON file in the
Request
? I have an external JSON file calledjsonexample.json
. How do I make this file as an input? -
Kul-Tigin over 10 years@amnbhrm it's another question's subject, is not related with this question. Please feel free to ask a new question, I'd be glad to help if I could.
-
Frédéric almost 5 yearsThis is even documented here: If your application requires unparsed data from the form, you can access it by calling Request.Form without any parameters.
-
Frédéric almost 5 yearsBut unfortunately, it does not work for a JSon content. This yield an empty string instead of the JSON raw text.