我正在尝试在网站上发出POST请求,以上传Excel文件。 当我手动执行操作(手动浏览文件输入html元素中的文件)并捕获网络流量时,fiddler上将显示以下消息:
Host: electool.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0
Accept: */*
Accept-Language: es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
X-Requested-With: XMLHttpRequest
Content-Type: multipart/form-data; boundary=---------------------------8432274816859
Content-Length: 35577
DNT: 1
Connection: keep-alive
Referer: https://electool.com/sourcingtool/pageflowViews/tender_view/action.html?pageflow=tender_view:-2
Cookie: JSESSIONID=87C7F4550EFBDF7A8D6F94C2D021CBB5; electool_sso=5A7A319313EA0EF4
-----------------------------8432274816859
Content-Disposition: form-data; name="qId"
1
-----------------------------8432274816859
Content-Disposition: form-data; name="attachment_1"; filename="A_aFRR negatív_QWERTY00_W38.xlsx"
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
..."
我想对excel vba进行相同操作(选择文件并发布相同的消息以上传excel文件)
我现在拥有的代码:
For i = 1 To ie.Manage.Cookies.Count
myCookie = myCookie & ie.Manage.Cookies.Item(i).Name & "=" & ie.Manage.Cookies.Item(i).Value & "; "
Next
myCookie = Left(myCookie, Len(myCookie) - 2)
Dim strBoundary As String
strBoundary = "-----------------------------501911906621"
myURL2 = "https://electool.com/sourcingtool/participant/ajaxSaveAttachment.htm"
sPayLoad = strBoundary & vbNewLine & _
"Content-Disposition: form-data; name=""qId""" & vbNewLine & vbNewLine & _
"1" & vbNewLine & strBoundary & vbNewLine & _
"Content-Disposition: form-data; name=""attachment_1"";filename=""E_W_37_negativ.xlsx""" & _
vbNewLine & "Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" & _
vbNewLine & vbNewLine
sPayLoad = sPayLoad & GetFile(myFile) & strBoundary
With CreateObject("Msxml2.ServerXMLHTTP.6.0")
.Open "POST", myURL2, False
.setRequestHeader "Content-Type", "multipart/form-data; boundary=" & strBoundary
.setRequestHeader "Content-Length", LenB(sPayLoad)
.setRequestHeader "Host", "electool.com"
.setRequestHeader "Cookie", myCookie
.setRequestHeader "Referer", ie.url
.send (sPayLoad)
Debug.Print .responseText
End With
End Sub
Function GetFile(ByVal FileName As String) As String
Dim FileContents() As Byte, FileNumber As Integer
ReDim FileContents(FileLen(FileName) - 1)
FileNumber = FreeFile()
Open FileName For Binary As FileNumber
Get FileNumber, , FileContents
Close (FileNumber)
GetFile = StrConv(FileContents, vbUnicode)
End Function
我得到的答复是:ng failed; nested exception is com.electool.sourcing.framework.util.request.exception.RequestParameterNotPresentException: Not found parameter: [qId] in request!
我也尝试了在此链接上找到的内容,但是仍然无法正常工作(或者我在VBA中无法很好地实现它) https://wqweto.wordpress.com/2011/07/12/vb6-using-wininet-to-post-binary-file/