1

我被困在一些我确定以前必须多次解决的问题上,但是对于我所有的搜索,我似乎无法找到我需要的详细信息/文档。

我想从 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 的响应(状态)。

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

4

0 回答 0