相关疑难解决方法(0)

如何向可能重定向到登录页面的页面发出POST请求

我在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
Run Code Online (Sandbox Code Playgroud)

我的问题是接受请求的页面(在这种情况下,文件上载页面)受到身份验证的保护 - 上面的初始请求将返回登录页面而不是页面本身.

我试图检测登录页面是否出现,如果是,则将用户名和密码作为表单变量发布(我希望这相当于人类在网页浏览器中输入用户名和密码进入页面).

所以步骤是:
*请求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 …
Run Code Online (Sandbox Code Playgroud)

post vba winhttp outlook-vba

4
推荐指数
2
解决办法
2万
查看次数

不理解为什么WinHTTP不验证某些HTTPS资源

我非常感谢任何可以帮助我解决问题的帮助.

从Excel VBA代码我需要从HTTPS站点https://redmine.itransition.com/下载并解析CSV文件.我尝试使用WinHTTP来获取文件.但是,我无法理解为什么身份验证不起作用.这是相关代码:

TargetURL = "https://redmine.itransition.com/projects/pmct/time_entries.csv"
Set HTTPReq = CreateObject("WinHttp.WinHttpRequest.5.1")
HTTPReq.Option(4) = 13056 ' WinHttpRequestOption_SslErrorIgnoreFlags 13056: ignore all err, 0: accept no err
HTTPReq.Open "GET", TargetURL, False
HTTPReq.SetCredentials "UN", "PW", 0
HTTPReq.send
Run Code Online (Sandbox Code Playgroud)

返回以下响应(仅列出某些字符串):

Content-Type: text/html; charset=utf-8
Status: 406
X-Runtime: 5
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用成功的手动身份验证后从Firefox cookie发送"Cookie"字符串

HTTPReq.setRequestHeader "Cookie", SetCookieString
HTTPReq.send
Run Code Online (Sandbox Code Playgroud)

我很容易得到预期的文件.当然,我对这种解决方案不满意,并希望执行真正的WinHTTP身份验证.但是,我无法理解我的代码中出了什么问题或错过了什么.我很可能必须使用.SetClientCertificate方法,但这对我来说还不清楚 - 需要哪个证书?

或者,更一般:我应该使用哪些WinHTTP方法或函数进行调试,以找出哪个步骤阻塞/不正确并阻止我进行正确的身份验证?我花了两周时间通过MSDN和各种资源寻求,但仍然没有解决方案.

提前感谢您的建议!

authentication https vba winhttp

2
推荐指数
1
解决办法
2万
查看次数

标签 统计

vba ×2

winhttp ×2

authentication ×1

https ×1

outlook-vba ×1

post ×1