【问题标题】:VB6 POST to a server with content-type form-data doesn't receive the parametersVB6 POST到具有内容类型表单数据的服务器不接收参数
【发布时间】:2019-03-15 18:35:19
【问题描述】:

我尝试使用 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 和其他人,结果总是一样。

有什么建议吗?

【问题讨论】:

  • 为什么vba 标记在关于vb6 的问题上?
  • 预期的反应是什么?
  • vba 标签,我的错。我添加了预期的响应。
  • 你的边界搞错了。检查this post 是如何正确完成的。

标签: post request vb6 xmlhttprequest


【解决方案1】:

改变呢:

boundary = "----WebKitFormBoundary7MA4YWxkTrZu0gW"

到:

boundary = "WebKitFormBoundary7MA4YWxkTrZu0gW"

... 而是在需要的地方为这个值加上前缀“--”(不是“----”)。

“--”前缀不属于这里,你有两个在一行中:

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

通过将“--”加倍,您似乎把自己弄糊涂了。连字符不是边界值的一部分。

【讨论】:

    【解决方案2】:

    这一行之后

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

    在这一行之前

    msxml.Send data
    

    试一下

    data = data & boundary & "--"
    

    以语法有效的方式结束表单的主体。

    【讨论】:

      【解决方案3】:

      感谢所有帮助过我的人。

      除了向我建议的边界错误之外,我尝试的事情没有成功,因为我缺少参数的 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
      

      【讨论】:

        猜你喜欢
        • 2018-03-05
        • 1970-01-01
        • 2018-02-24
        • 1970-01-01
        • 1970-01-01
        • 2015-10-24
        • 2018-08-03
        • 2019-06-29
        • 2010-12-08
        相关资源
        最近更新 更多