我被困在一些我确定以前必须多次解决的问题上,但是对于我所有的搜索,我似乎无法找到我需要的详细信息/文档。
我想从 Excel 登录网站以获取一些股价数据。我不想使用“IE 对象”,但想用 MSXML2 做到这一点。
网页(相关部分)的 html 源代码如下所示
<form id="login_form" method="POST" name="login_form" action="https://secure.advfn.com/login/secure">
<input id="redirect_url" type="hidden" name="redirect_url" value="aHR0cDovL3VrLmFkdmZuLmNvbS9jb21tb24vYWNjb3VudC9sb2dpbg==">
<div class="fields">
<label for="login_username">Username</label>
<input id="login_username" class="text ui-widget-content" type="text" maxlength="64" name="login_username" value="" tabindex="1">
</div>
<div class="fields">
<label for="login_password">Password</label>
<input id="login_password" class="text ui-widget-content" type="password" maxlength="16" name="login_password" value="" tabindex="2">
</div>
<div class="fields">
<input id="login_submit" class="button" type="submit" value="Log In" tabindex="3">
</div>
</form>
我的登录尝试看起来像这样
Set oXML = New MSXML2.XMLHTTP
oXML.Open "GET", "http://uk.advfn.com/common/account/login", False
oXML.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
oXML.send "login_username=xxxxxx&login_password=xxxxx"
但我似乎收到的只是原始页面
我已经尝试了各种排列,但没有成功,虽然有文档,但我无法找到针对此类问题和/或代码示例的具体内容。
好的,经过一些实验,我现在有了这段代码
Dim oXML_get
Dim oXML_post
Dim sHTML As String
' Instantiate MSXML2
Set oXML_get = New MSXML2.XMLHTTP
Set oXML_post = New MSXML2.XMLHTTP
' Navigate to logon page
oXML_get.Open "GET", "http://uk.advfn.com/common/account/login", False
oXML_get.send
sHTML = oXML_get.responseText
s2 = ParseText(sHTML, "<input type=""hidden"" value=""", """ name=""redirect_url""")
sendText = "login_username=xxxxxxxx&login_password=xxxxxxx" & "&redirect_url=" & s2
postUrl = "https://secure.advfn.com/login/secure?login_password=xxxxxxx&login_username=xxxxxxx&redirect_url=" & s2
oXML_post.Open "POST", "https://secure.advfn.com/login/secure", False
oXML_post.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
oXML_post.send 'sendText
这将转到登录页面以获取 redirect_url 参数(似乎有所不同)。ParseText 函数提取此参数的值(并对其进行 URL 编码)。然后我在“POST”调用中使用它 - 这是一个不同的 URL。
现在我得到 500 的响应(状态)。
任何进一步的帮助表示赞赏。谢谢