Я пытаюсь автоматизировать регистрацию и загрузку данных для веб-сайта (https://indexes.nasdaqomx.com/). Мой код стенает authenticiation, где проблема, моя верхняя часть WinHttpReq.responseText говорит, как показано ниже:веб-сайт Ошибка входа в систему с помощью WinHTTPrequest.5.1/Microsoft.XMLHTTP в VBA
</header>
<div class="container">
<div class="row-fluid spacer">
<div class="span12">
<p class="textCenter">
We're sorry your request could not be fulfilled. Rest assured we have been notifed and will resolve this issue shortly.
</p>
</div>
</div>
Мой код VBA, как показано ниже:
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub DownloadFile()
Dim myuser As String
Dim MyPass As String
Dim sHTML As String
myuser = "xxxxxx"
MyPass = "xxxxxx"
Dim WinHttpReq As Object
Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
WinHttpReq.Open "POST", "https://indexes.nasdaqomx.com/Account/LogOn", True
WinHttpReq.SetRequestHeader "Content-type", "application/x-www-form-urlencoded"
WinHttpReq.SetRequestHeader "Connection", "keep-alive"
WinHttpReq.send "UserName=xxxxxx&Password=xxxxxxx"
Sleep (6000)
Debug.Print WinHttpReq.readyState
If WinHttpReq.readyState = 4 Then
sHTML = WinHttpReq.responseText
'this below line result shows We're sorry your request could not be fulfilled
Debug.Print sHTML
End If
Sleep (5000) ' delay 4 second
WinHttpReq.Open "GET", "https://indexes.nasdaqomx.com/Index/ExportWeightings/NDX?tradeDate=2015-08-19T00:00:00.000&timeOfDay=SOD", True
Debug.Print WinHttpReq.readyState
WinHttpReq.SetRequestHeader "Connection", "keep-alive"
WinHttpReq.send
Sleep (5000) ' delay 4 second
Debug.Print WinHttpReq.readyState
MyURL = WinHttpReq.responseBody
If WinHttpReq.Status = 200 Then
Set oStream = CreateObject("ADODB.Stream")
oStream.Open
oStream.Type = 1
oStream.Write WinHttpReq.responseBody
' 1 = no overwrite, 2 = overwrite
oStream.SaveToFile "D:\Visual Basic Programming\Macro\nasdaqomx\SODWeightings_20150819_NDX.xlsx", 2
oStream.Close
End If
End Sub
Итак, где проблема? У меня есть действительные учетные данные для этого, так как ручной вход работает нормально. Ниже приведен снимок экрана html-кода этой страницы. Он показывает какой-то код проверки запроса, но каждый раз, когда я это заметил, он отличается. Может ли кто-нибудь сказать мне, как делать логин программным образом на веб-странице?
Вы не читаете скрытый элемент ввода для токена и передаете его обратно в строке отправки. Иногда вам нужно возвращать, казалось бы, безобидные элементы ввода, такие как submit. Лучше всего использовать такой инструмент, как [Fiddler] (http://www.telerik.com/fiddler), чтобы проверить, какая строка POST передана, и где во время ручного входа. – Jeeped
Я подозревал это .... мог у PLZ опубликовать код, как читать скрытый элемент ввода для токена и отправить его обратно – pmr