Вызов Rest API из VBA - "Соединение с сервером было прервано ненормально"
Я пытаюсь RESTfull API из Excel VBA. У меня уже есть рабочая версия на C#:
//Request Auth Token
var client = new RestClient("https://api.xxx.com/exp/oauth2/v1/access_token_cors");
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddParameter("application/x-www-form-urlencoded", "response_type=token&grant_type=client_credentials&client_id=1234&client_secret=1234&scope=", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Нужно портировать этот код на VBA. Я написал:
Set MyRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
MyRequest.Open "POST", "https://api.xxx.com/exp/oauth2/v1/access_token_cors", False
MyRequest.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
PostData = """application/x-www-form-urlencoded"", ""response_type=token&grant_type=client_credentials&client_id=1234&client_secret=1234&scope="""
MyRequest.send (PostData)
Когда я запускаю версию VBA, я получаю сообщение об ошибке "Соединение с сервером было прервано ненормально".
Так как он работает в C#, это не может быть проблема с брандмауэром или сервером. Что я могу сделать, чтобы заставить это работать? Я искал похожие вопросы, но ни один из них не подходит для моей ситуации.
1 ответ
Вы должны быть в состоянии сделать следующее:
Set request = CreateObject("WinHttp.WinHttpRequest.5.1")
request.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
request.Open "POST", URL, False 'Your missing the actual url
request.Option(4) 'Ignore SSL Errors.
request.Option(12) 'Allow redirect to SSL
request.send("response_type=token&grant_type=client_credentials&client_id=1234&client_secret=1234&scope=")
Я предполагаю, что проблема в том, что у вас нет определенного URL. Скорее всего, API может быть SSL, поэтому вы должны учитывать это, а также зачем создавать PostData
когда вы можете ввести строку. У вас также есть много кавычек, я полагаю, что вы делаете это, чтобы правильно отправить их, я думаю, что это не так. Вышеуказанное должно работать на вас.
В случае, если у вас есть эта проблема на Windows 7 или 8, это может быть связано с отправкой пакетов данных VBA по протоколу SSL, который отбрасывается серверами, принимающими только TLS. В этом случае вам нужно будет применить двухэтапное исправление / обновление, чтобы исправить это для Windows 7,
Шаг 1. Получить Центр обновления Майкрософт: Загрузите соответствующую (32-разрядную или 64-разрядную версию Windows для пользователя) Обновление протокола безопасности Microsoft и установите, если она еще не установлена.
Шаг 2. Загрузите Microsoft Easy Fix: загрузите Microsoft "Easy Fix" из статьи поддержки Microsoft и выполните настройку TLS 1.1+ по умолчанию.