如何使用(Excel)VBA和MSXML2.XMLHTTP登录网站

时间:2013-06-24 15:45:40

标签: vba authentication

我坚持认为我以前肯定已经解决了很多次,但是对于我所有的搜索,我似乎无法找到我需要的细节/文档。

我想从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。

任何进一步的帮助表示赞赏。感谢

0 个答案:

没有答案