Вызов 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+ по умолчанию.

Источник: обновление, чтобы включить TLS 1.1 и TLS 1.2 в качестве безопасных протоколов по умолчанию в WinHTTP в Windows

Другие вопросы по тегам