2015-07-15 3 views
3

Прошу прощения, если заголовок моего вопроса неверен. Я привык к идее сеансов PHP с API.Создание сеанса API с xmlHttp в VBA

Я пытаюсь сделать то же подвиг в VBA со следующим кодом:

'Login 
strLogin = "https://URL.COM/authenticateUser?login=username&apiKey=password" 
Set xmlHttp = CreateObject("MSXML2.ServerXMLHTTP.6.0") 
xmlHttp.Open "GET", strLogin 
xmlHttp.setRequestHeader "Content-Type", "text/xml" 
xmlHttp.send 

'Save the response to a string 
strReturn = xmlHttp.responseText 


'Open URL and get JSON data 

strUrl = "https://URL.COM/Search/search?searchTerm=" & Keyword & "&mode=beginwith" 
Set xmlHttp = CreateObject("MSXML2.ServerXMLHTTP.6.0") 
xmlHttp.Open "GET", strUrl 
xmlHttp.setRequestHeader "Content-Type", "text/xml" 
xmlHttp.send 

'Save the response to a string 
strReturn = xmlHttp.responseText 


Sheets(1).Cells(20, 2).Value = strReturn 

С помощью этого API, мне нужно войти в первый перед выполнением каких-либо вызовов, которые возвращают данные.

Моя проблема заключается в том, что я не могу определить, как «оставаться в системе», чтобы мой второй вызов работал.

после того, как войти в систему, strReturn заполняется следующей строкой:

{"Status":{"Code":"2","Message":"Authentication Succeeded","Success":"true"}} 

Однако, когда я иду использовать strUrl, я получаю следующее сообщение:

{"Status":{"Code":"1","Message":"Invalid User Name Or Password","Success":"false"}}

я использовал этот код в предыдущих проектах, где мне нужно было предоставить ключ API вместе с URL для каждого запроса на сервер - так что это явно сработало. Я не уверен, как достичь концепции «создания сеанса», хотя с помощью xmlHttp.

+1

просто наблюдение, но вы создаете новый объект «xmlHttp» перед выполнением второго GET. возможно, вы можете повторно использовать существующий объект «xmlHttp» и посмотреть, помогает ли вам поддерживать сеанс? – Fink

ответ

3

Так, для кого-то, кто натыкается на это, простое решение было удалить следующую строку из вторых вызова:

Set xmlHttp = CreateObject("MSXML2.ServerXMLHTTP.6.0") 

не создавать новый объект, VBA способен сохранять и используйте cookie с первого входа в систему.

Окончательный код выглядит следующим образом:

'Login 
strLogin = "https://URL.COM/authenticateUser?login=username&apiKey=password" 
Set xmlHttp = CreateObject("MSXML2.ServerXMLHTTP.6.0") 
xmlHttp.Open "GET", strLogin 
xmlHttp.setRequestHeader "Content-Type", "text/xml" 
xmlHttp.send 

'Save the response to a string 
strReturn = xmlHttp.responseText 


'Open URL and get JSON data 

strUrl = "https://URL.COM/Search/search?searchTerm=" & Keyword & "&mode=beginwith" 
xmlHttp.Open "GET", strUrl 
xmlHttp.setRequestHeader "Content-Type", "text/xml" 
xmlHttp.send 

'Save the response to a string 
strReturn = xmlHttp.responseText 


Sheets(1).Cells(20, 2).Value = strReturn 

И API, который требует логин может сохранить сеанс работы.

Смежные вопросы