Доступ к телу запроса с использованием классического ASP? - PullRequest
6 голосов
/ 19 марта 2012

Как мне получить доступ к тому, что было отправлено клиентом, на мой классический сервер ASP? Я знаю, что есть переменная Request.Forms, но запрос клиента не был сделан с помощью формы. Тело клиентского запроса - это просто строка, созданная с использованием стандартного оператора POST. Спасибо

Ответы [ 3 ]

20 голосов
/ 20 марта 2012

Вам необходимо прочитать байты запроса, если тип содержимого запроса, отправленного клиентом, не является данными формы. В этом случае запрос не является данными формы, доступными через пары имя-значение, поэтому вы не можете использовать коллекцию 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
}
2 голосов
/ 14 августа 2012

Чтобы получить строковое значение JSON, просто используйте CStr(Request.Form)

Работает угощение.

1 голос
/ 19 марта 2012

В Classic ASP Request.Form - это коллекция, используемая для любых данных, отправляемых через POST.

Ради полноты добавлю, что Request.QueryString - это коллекция, используемая для любых данных, отправляемых через GET / строку запроса.

На основании вышесказанного я бы предположил, что, хотя клиент не является веб-браузером, коллекция Request.Form должна быть заполнена.


примечание: все это предполагает, что отправляемые данные имеют текстовый характер, и что нет отправляемых двоичных загрузок (например, изображений или файлов). Обновите тело вопроса, если это неверное предположение.


Чтобы проверить, запишите исходные данные формы и посмотрите, что у вас есть - что-то вроде:

Response.Write(Request.Form)

Который с обычной веб-страницей выдаст что-то вроде

field=value&field2=value2

Если вы получите что-то в этом духе, вы можете использовать это как ссылку для правильного индекса.

Если вы не получили что-то подобное, обновите ваш вопрос тем, что вы пробовали и что вы получили.

...