我在 Outlook VBA 中使用宏通过 POST 将文件提交到 URL:
Set http = New WinHttp.WinHttpRequest
http.Open "POST", UrlToPostTo, False 'True '
http.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
http.setRequestHeader "Content-Type", "multipart/form-data; "
http.Send data
我的问题是接受请求的页面(在这种情况下是文件上传页面)受身份验证保护 - 上面的初始请求将返回登录页面而不是页面本身。
我试图检测登录页面是否出现,如果出现,则将用户名和密码作为表单变量发布(我希望这相当于人类在网络浏览器的页面中输入所述用户名和密码)。
所以步骤是:
* 请求 URL(包括文件和帖子)。
* 检查响应是否为登录页面。
* 如果是,那么在同一个http会话中,将用户名和密码提交给URL。
* 如果服务器现在处理原始帖子,很好,否则我可以再次发布。
代码如下所示:
' if the login page comes back, send credentials '
If (InStr(http.ResponseText, "j_password") > 0) Then
Dim loginData As String
loginData = "j_username=theusername&j_password=thepassword"
http.Open "POST", UrlToPostTo, False
http.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
http.setRequestHeader "Content-Type", "multipart/form-data; "
http.Send loginData
End If
但是当我这样做时, http.Responsetext 仍然只是登录页面(或再次?)。
知道我做错了什么吗?我的计划是否有效?
(这与试图解决这个问题有关)