投稿方法 + winhttprequest + multipart/form-data
-
28-09-2019 - |
質問
なぜこれがうまくいかないのかは問題を見つけることができないように思えます。
これがコードです。
Public Const MULTIPART_BOUNDARY = "speed"
Function getBalance() As String
Dim sEntityBody As String
Dim postBody() As Byte
Dim username As String
Dim password As String
username = CStr(frmMain.txtUser.text)
password = CStr(frmMain.txtPass.text)
sEntityBody = "--" & MULTIPART_BOUNDARY & vbCrLf
sEntityBody = sEntityBody & "Content-Disposition: form-data; name=""function""" & vbCrLf & vbCrLf & "balance" & vbCrLf
sEntityBody = sEntityBody & "--" & MULTIPART_BOUNDARY & vbCrLf
sEntityBody = sEntityBody & "Content-Disposition: form-data; name=""username""" & vbCrLf & vbCrLf & username & vbCrLf
sEntityBody = sEntityBody & "--" & MULTIPART_BOUNDARY & vbCrLf
sEntityBody = sEntityBody & "Content-Disposition: form-data; name=""password""" & vbCrLf & vbCrLf & password & vbCrLf
sEntityBody = sEntityBody & "--" & MULTIPART_BOUNDARY & "--" & vbCrLf
postBody = StrConv(sEntityBody, vbFromUnicode)
Dim xhr As Object
Set xhr = CreateObject("WinHttp.WinHttpRequest.5.1")
xhr.Option(WinHttpRequestOption_EnableRedirects) = False
If xhr Is Nothing Then Set xhr = CreateObject("WinHttp.WinHttpRequest")
If xhr Is Nothing Then Set xhr = CreateObject("MSXML2.ServerXMLHTTP")
If xhr Is Nothing Then Set xhr = CreateObject("Microsoft.XMLHTTP")
xhr.open "POST", "http://poster.example.com", False
xhr.setRequestHeader "User-Agent", "Alalala"
xhr.setRequestHeader "Content-Type", "multipart/form-data; boundary=" & MULTIPART_BOUNDARY
xhr.setRequestHeader "Content-Length", Len(sEntityBody)
xhr.send "" + sEntityBody 'postBody 'URLEncode(sEntityBody)
If xhr.Status = 200 Then
getBalance = xhr.responseText
Else
frmMain.addToChatbox "Failed at getting response from blah ErrCode:" & xhr.Status
End If
End Function
以下は次のとおりです(ただし、HTMLフォームにすぎません)。
<form
method="post"
action="http://poster.example.com/"
enctype="multipart/form-data">
<input type="hidden" name="function" value="balance">
<input type="text" name="username" value="blah">
<input type="text" name="password" value="blah">
<input type="submit" value="Send">
</form>
これがパケットスニフです。 (その後、ホストなどを例に変更しました)
POST/HTTP/1.1..USER-AGENT:AlalAla..Content-Type:MultiPart/Form-Data;境界= speed..content-length:233..accept: /..host:poster.example.com..connection:Keep-Alive ....- speed..content-dispostion:form-data; name = "function" .... balance ..-- speed..content-dispostion:form-data; name = "username" .... blah ..-- speed..content-dispostion:form-data; name = "password" .... blah ..--速度 - ..
応答は空です
http/1.1 200 ok..date:木、2010年10月7日20:31:20 gmt..server:apache..content-length:0..connection:close..content-type:text/html; charset = utf-8 ....
PS> Value Sendを備えた送信ボタンを送信する必要はないので、誰かが不思議に思っている場合はそうではありません。スニッフィングから気づいたのは、1つのパケットとしてヘッダー +ポストデータ(アップロードデータ)を1つのパケットとして送信し、Firefox/Chromeが2つの別々のパケットとして送信することです。
ありがとうございました
解決
間違った コンテンツ分散 である必要があります コンテンツディスポジション うん、私が6に苦しんでいたことに感謝しますか?たぶん7時間。
最後に解決しました