Страницы: 1
RSS
Обращение к API через POST-запрос в VBA для загрузки файла
 
Здравствуйте!
Очень прошу вашей помощи по следующей задаче:
- есть excel-файл формата csv, который через API мне нужно загружать в специальное ПО.
Через VBA мне нужно получить токен аутентификации и затем загрузить файл. Разработчики мне прислали информацию (ниже указал), чтобы прописать это в VBA, но я с такими запросами не работал и возникли сложности:
1) Нужно получить токен аутентификации
POST запрос
Код
"http://authentication-123.ru" -H "accept: application/json" -H "Content-Type: application/json" -d "{ "username": "login", "password": "string"}"


В теле ответа придёт токен:
Код
{
 "token": "eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyRGF0YSI6eyJsb2dpbiI6InJ"
}


2)      Чтобы загрузить файл нужно использовать другое API
http://test.ru/index.html
Для загрузки файла нужен еще один POST запрос, в котором передается токен и файл
"http://test.ru/uploadDiscountData" -H "accept: */*" -H "Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyRGF0YSI6eyJsb2dpbiI6InJ" -H "Content-Type: multipart/form-data" -F "file=@PL.csv;type=text/csv"

Я попробовал для 1-го пункта прописать запрос (поискал на форумах), но не вышло. Выдает ошибку: base64encode sub or function not defined
Если задача очень сложная, то кто сможет помочь на платной основе?

Спасибо.

P.S. Ссылки и токены я указал произвольные.
 
Может быть, в описании примеры для обращения к программе Curl ? Проще эту программу вызвать из Excel (она штатно поставляется с Win10).
Владимир
 
sokol92,уточнил у разработчика, вот что он ответил: "да, это синтаксис курла, для VBA надо будет раскладывать по заголовкам".
Как это сделать - не знаю...
 
А чем вариант для Curl плох?
Владимир
 
Пробный вариант в файле.
Но надо документацию читать по обмену.
 
doober, появилась ошибка на строке:
Код
xmlhttp.send (ToByteArray(PostData))

Цитата
Run-time error '-2147012894 (80072ee2)':
The operation timed-out.
Но скрипт работал не долго, 22 секунды.

sokol92, я полагаю, что разработчик VBA плохо знает, работают с другими языками программирования.
Я с Crul не работал вообще никак, поэтому у меня нет соображений, как это сделать.
 
Цитата
stevie44 написал:
Run-time error '-2147012894 (80072ee2)': The operation timed-out.
А погуглить ошибку?
20 секунд это конечно мало для такой ошибки.
Без теста в темную трудно понять, почему она возникает.
Изменено: doober - 10.12.2020 18:33:09
 
doober, я погуглил как раз, там про 4 минуты везде пишут. Я поэтому и замерял время обработки до возникновения ошибки.

Поэтому и не понял... Нашёл команду SetTimeouts - не помогло.
Код
xmlhttp.SetTimeouts 3000000, 3000000, 3000000, 3000000
Изменено: stevie44 - 10.12.2020 19:08:11
 
Цитата
stevie44 написал:
Я с Crul не работал вообще никак, поэтому у меня нет соображений, как это сделать.
Работа с Curl ничем не отличается от работы с любой другой утилитой командной строки. Плюс Curl замечательно документирована на указанном выше сайте разработчика.

Поскольку Сергей уже всё сделал на "родных" средствах, подождем какую-нибудь следующую тему.
Владимир
 
Вы уверены, что сервер сразу отвечает?
Проверьте пинг к серверу.Причин может быть несколько
 
doober, извиняюсь за долгий ответ. Огромное спасибо за код!

Не срабатывало, так как после user потеряны кавычки были (Chr(34)) :)
Потом возникли сложности, в string не помещался токен из-за ограничения в 255 символов.
Токен удалось вырезать mid(xmlhttp.responseText, 11, len(xmlhttp.responseText) - 12)
Токен получается взять и отправить его в сервис, не получается файл отправить, выдает 400 bad request.
Если токен "поломать", то выдает 401...
 
SOWA, почти по теме - это вообще не по теме.
Читайте правила форума, создавайте тему с названием, отражающим задачу, с примером и описанием.
Код в сообщении форматируется с помощью кнопки <...>
Страницы: 1
Наверх