VB6 POST 到具有内容类型表单数据的服务器不接收参数
VB6 POST to a server with content-type form-data doesn't receive the parameters
我正在尝试使用 Content-Type=form-data 向服务器发出 post 请求。这是在 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 和其他方法,结果总是一样。
有什么建议吗?
这一行之后
data = data & "other data for param2" & vbCrLf
在此行之前
msxml.Send data
试试放
data = data & boundary & "--"
以语法上有效的方式结束表单正文。
改变什么:
boundary = "----WebKitFormBoundary7MA4YWxkTrZu0gW"
至:
boundary = "WebKitFormBoundary7MA4YWxkTrZu0gW"
... 相反,然后在需要的地方用“--”(而不是“----”)作为前缀。
“--”前缀不属于此处,并且您连续 两个:
msxml.setRequestHeader "Content-Type", "multipart/form-data;Charset=UTF-8; boundary=" & boundary
通过将“--”加倍,您似乎把自己弄糊涂了。连字符 不是 边界值的一部分。
感谢所有帮助过我的人。
除了向我建议的边界错误外,我尝试没有成功,因为我缺少参数的 Content-Type。
添加 Content-Type 和正确的边界字符串,post 有效
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
我正在尝试使用 Content-Type=form-data 向服务器发出 post 请求。这是在 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 和其他方法,结果总是一样。
有什么建议吗?
这一行之后
data = data & "other data for param2" & vbCrLf
在此行之前
msxml.Send data
试试放
data = data & boundary & "--"
以语法上有效的方式结束表单正文。
改变什么:
boundary = "----WebKitFormBoundary7MA4YWxkTrZu0gW"
至:
boundary = "WebKitFormBoundary7MA4YWxkTrZu0gW"
... 相反,然后在需要的地方用“--”(而不是“----”)作为前缀。
“--”前缀不属于此处,并且您连续 两个:
msxml.setRequestHeader "Content-Type", "multipart/form-data;Charset=UTF-8; boundary=" & boundary
通过将“--”加倍,您似乎把自己弄糊涂了。连字符 不是 边界值的一部分。
感谢所有帮助过我的人。
除了向我建议的边界错误外,我尝试没有成功,因为我缺少参数的 Content-Type。
添加 Content-Type 和正确的边界字符串,post 有效
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