VB6 POST к серверу с данными формы типа контента не получает параметры - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь сделать почтовый запрос к серверу, используя Content-Type = form-data.Это в VB6 (да, visual basic6).Вызов запроса выполнен успешно, но сервер не может получить параметры.

Я тестирую на httpbin.org, для простоты.

Dim msxml As msxml.XMLHTTPRequest
Dim data As String
Dim boundary As String

Set msxml = New msxml.XMLHTTPRequest


boundary = "----WebKitFormBoundary7MA4YWxkTrZu0gW"

msxml.Open "POST", "http://httpbin.org/post", False

msxml.setRequestHeader "Content-Type", "multipart/form-data;Charset=UTF-8; boundary=" & boundary

data = ""
data = data & boundary & vbCrLf
data = data & "Content-Disposition: form-data; name=""param1""" & vbCrLf
data = data & vbCrLf
data = data & "data for param1" & vbCrLf

data = data & boundary & vbCrLf
data = data & "Content-Disposition: form-data; name=""param2""" & vbCrLf
data = data & vbCrLf
data = data & "other data for param2" & vbCrLf

data = data & boundary & "--"

msxml.Send data

Debug.Print msxml.responseText

Получен ответ:

{
  "args": {},
  "data": "",
  "files": {},
  "form": {},
  "headers": {
    "Accept": "*/*",
    "Accept-Encoding": "gzip, deflate",
    "Accept-Language": "es",
    "Cache-Control": "no-cache",
    "Connection": "close",
    "Content-Length": "216",
    "Content-Type": "multipart/form-data;Charset=UTF-8; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW",
    "Host": "httpbin.org",
    "User-Agent": "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET4.0C; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0E)"
  },
  "json": null,
  "origin": "181.45.250.169",
  "url": "http://httpbin.org/post"
}

Как видите, свойство "form" пусто.

Ожидаемый ответ:

"form": {
    "param1": "data for param1",
    "param2": "other data for param2"
},

Я уже пробовал с WinHttpRequest идругие, всегда один и тот же результат.

Есть предложения?

Ответы [ 3 ]

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

Как насчет изменения:

boundary = "----WebKitFormBoundary7MA4YWxkTrZu0gW"

на:

boundary = "WebKitFormBoundary7MA4YWxkTrZu0gW"

... вместо этого, а затем в местах, где это необходимо, префикс этого значения с "-" (не "----").

Префикс "-" здесь не принадлежит, и у вас есть два из них подряд:

msxml.setRequestHeader "Content-Type", "multipart/form-data;Charset=UTF-8; boundary=" & boundary
* 1013Удваивая «-», вы, кажется, запутались.Дефисы не являются частью граничного значения.
0 голосов
/ 14 октября 2018

Спасибо всем, кто помог мне.

Кроме ошибки в границе, которая подсказывает мне, что я пытался безуспешно, потому что мне не хватало Content-Type для параметров.

При добавлении Content-Type и правильной строки границы сообщение работает

Dim msxml As msxml.XMLHTTPRequest
Dim data As String
Dim boundary As String

Set msxml = New msxml.XMLHTTPRequest

boundary = "MyCustomBoundary7MA4YWxkTrZu0gW"

msxml.Open "POST", "http://httpbin.org/post", False

msxml.setRequestHeader "Content-Type", "multipart/form-data;Charset=UTF-8; boundary=" & boundary

data = ""
data = data & "--" & boundary & vbCrLf
data = data & "Content-Disposition: form-data; name=""param1""" & vbCrLf
data = data & "Content-Type: text/plain" & vbCrLf & vbCrLf
data = data & "data for param1" & vbCrLf

data = data & "--" & boundary & vbCrLf
data = data & "Content-Disposition: form-data; name=""param2""" & vbCrLf
data = data & "Content-Type: text/plain" & vbCrLf & vbCrLf
data = data & "other data for param2" & vbCrLf

data = data & "--" & boundary & "--"

msxml.Send data

Debug.Print msxml.responseText
0 голосов
/ 11 октября 2018

После этой строки

data = data & "other data for param2" & vbCrLf

и перед этой строкой

msxml.Send data

попробуйте поставить

data = data & boundary & "--"

, чтобы завершить тело формы синтаксически допустимым образом.

...