VB6 POST到内容类型为form-data的服务器未收到参数

时间:2018-10-10 19:05:28

标签: post request vb6 xmlhttprequest

我尝试使用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": {
    "param1": "data for param1",
    "param2": "other data for param2"
},

我已经尝试过使用WinHttpRequest和其他方法,结果总是一样。

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

如何更改:

boundary = "----WebKitFormBoundary7MA4YWxkTrZu0gW"

收件人:

boundary = "WebKitFormBoundary7MA4YWxkTrZu0gW"

...,然后在需要的地方用“-”(而不是“ ----”)作为该值的前缀。

“-”前缀在这里不属于您,并且您连续有两个

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

通过加倍“-”,您似乎感到困惑。连字符不是边界值的一部分。

答案 1 :(得分:1)

此行之后

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

并在此行之前

msxml.Send data

试穿

data = data & boundary & "--"

以句法有效的方式结束表单的正文。

答案 2 :(得分:0)

感谢所有帮助过我的人。

除了提示我的边界错误外,我尝试失败的原因是因为我缺少参数的 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