Accessing a request's body using classic ASP?

13,568

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.

Share:
13,568
user798719
Author by

user798719

Some questions may end up being dumb, but if I ask it, it's not dumb to me.

Updated on July 22, 2022

Comments

  • user798719
    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
    user798719 about 12 years
    Thank 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
    user798719 about 12 years
    Does 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
    user798719 about 12 years
    Thank you very much. I knew something was missing from my understanding. I will investigate your solution. Appreciate it.
  • user798719
    user798719 about 12 years
    Hi, 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
    user798719 about 12 years
    Thank you very much. I really appreciate your help.
  • user798719
    user798719 about 12 years
    Thanks so much for taking the time to help a total stranger. You are great! (and your solution works)
  • emen
    emen over 10 years
    Hey, 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 called jsonexample.json. How do I make this file as an input?
  • Kul-Tigin
    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
    Frédéric almost 5 years
    This 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
    Frédéric almost 5 years
    But unfortunately, it does not work for a JSon content. This yield an empty string instead of the JSON raw text.