Идентификатор сеанса не обновляется при вызове API - PullRequest
2 голосов
/ 17 июня 2020

Я пытаюсь использовать VBA Excel для доступа к API, предоставляемому веб-сайтом www.myfxbook.com. Документация по API находится здесь (https://www.myfxbook.com/fr/api). Шаги для получения данных следующие:

  1. Вход через API входа
  2. Получить идентификатор сеанса из ответа API входа
  3. Получить данные на основе этот идентификатор сеанса через различные другие API
  4. Выход из системы через API выхода для создания нового сеанса

Проблема, с которой я сталкиваюсь, заключается в том, что даже несмотря на то, что API входа и выхода из системы используются и не выдает ошибок, я всегда получаю один и тот же идентификатор сеанса, когда пытаюсь использовать его через Excel VBA. С другой стороны, использование одних и тех же URL-адресов через Python или даже браузер каждый раз выдает мне другой идентификатор сеанса. я могу использовать только Excel для этого проекта. Может ли кто-нибудь помочь мне, как получить другой идентификатор сеанса при успешном выходе из системы?

Для этого я использую приведенный ниже код. Я скрыл (*******) идентификатор электронной почты и пароль в целях безопасности.

Sub extract()

Dim sht1 As Worksheet
Dim email As String
Dim password As String
Dim accountName As String
Dim url As String
Dim hreq As Object
Set hreq = CreateObject("MSXML2.XMLHTTP")
Dim accountID As String

Set sht1 = Sheets(1)
email = "*******"
password = "********"
accountName = "all day multiple currency coinexx"
loginURL = "https://www.myfxbook.com/api/login.xml?email=" + email + "&password=" + password
hreq.Open "GET", loginURL, False
hreq.Send
Dim xmlDoc As New MSXML2.DOMDocument60
Dim response As String
response = hreq.ResponseText
If Not xmlDoc.LoadXML(response) Then
    MsgBox ("Load Error")
End If

Dim xnodelist As MSXML2.IXMLDOMNodeList
Set xnodelist = xmlDoc.getElementsByTagName("session")
Dim sessionID As String
sessionID = xnodelist(0).Text

'Do Something here to get data. This part is working fine.

logoutURL = "https://www.myfxbook.com/api/logout.xml?session=" + sessionID
hreq.Open "GET", logoutURL, False
hreq.Send
response = hreq.ResponseText
If Not xmlDoc.LoadXML(response) Then
    MsgBox ("Load Error")
End If

End Sub

1 Ответ

1 голос
/ 18 июня 2020

Думаю, скорее всего, вы попали в кеширование. Попытайтесь избежать этого с помощью дополнительного заголовка

hreq.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
...