ASP Classic анализирует данные из curl POST -F - PullRequest
0 голосов
/ 17 октября 2018

У меня есть следующий запрос CURL, который указывает на мой сервис:

curl -X POST \
  http://go.example.com/ \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -H 'Postman-Token: cf0c1ab5-08ff-1aa2-428e-24b855e1a61c' \
  -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \
  -F fff=vvvvv \
  -F rrrr=ddddd \
  -F xx=something

Я пытаюсь поймать параметр xx в классическом коде ASP.Я пробовал 'Request ("xx") "и" Request.Form ("xx") ".

У вас есть идеи?

1 Ответ

0 голосов
/ 17 октября 2018

Это из документации CURL

-F, --form

(HTTP SMTP IMAP) Для семейства протоколов HTTP это позволяет имитировать завитокзаполненная форма, в которой пользователь нажал кнопку отправки. Это приводит к скручиванию данных POST с использованием multipart / form-data типа данных в соответствии с RFC 2388.

Когда форма отправляется в Classic ASP с использованием типа содержимогоmultipart/form-data единственный доступный метод - Request.BinaryRead(), поскольку Request.Form предназначен для application/x-www-form-urlencoded данных.

Вот краткий пример вызова Request.BinaryRead() для начала работы:

<%
'Should be less than configured request limit in IIS.
Const maxRequestSizeLimit = ...
Dim dataSize: dataSize = Request.TotalBytes
Dim formData

If dataSize < maxRequestSizeLimit Then
  'Read bytes into a SafeArray
  formData = Request.BinaryRead(dataSize)
  'Once you have a SafeArray its up to you to process it.
  ...
Else
  Response.Status = "413 PAYLOAD TOO LARGE"
  Response.End
End If
%>

Анализ SafeArray не прост

Если вы все еще хотите использовать Request.Form, вы можете сделать это, указав параметры формы в команде CURL, используя -d вместо -F.Из документации ;

-d, --data

(HTTP) Отправляет указанные данные в запросе POST на сервер HTTP, в том жето, что делает браузер, когда пользователь заполнил HTML-форму и нажал кнопку отправки. Это приведет к тому, что curl передаст данные на сервер, используя приложение типа контента / x-www-form-urlencoded .Сравните с -F, --form.

Таким образом, команда CURL будет выглядеть примерно так:

curl -X POST \
  http://go.mytest-service.com/ \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d fff=vvvvv \
  -d rrrr=ddddd \
  -d xx=something

Затем вы получите параметр xx в Classic ASP, используя;

<%
Dim xx: xx = Request.Form("xx")
%>

Полезные ссылки

...