Страницы: 1
RSS
Отправка запроса к API с использованием сертификата
 
Приветствую всех.

Возникла проблема с отправкой запроса к API Яндекс Директ.
Выложил ссылки на справку по Яндексу на всякий, потому что проблема возникает при отправке запросов именно к нему (в приложенном файле, а то местный антиспам не дает отправить сообщение). Тех. поддержка Яндекса может читать только общедоступную справку и давать консультации только теми словами, что уже и так написано в справке. Собственно они мне так и ответили, что если бы я писал на cURL или питоне, то они бы подсказали. Хотя я даже в этом случае сомневаюсь в их компетентности...
Попробовал отправить запросы этим же кодом к API Youtube, запрос улетел без капризов и был получен ответ.

При отправке запроса к API Яндекс Директ получаю следующие ошибки (в зависимости от опции WinHttpRequestOption_SecureProtocols):
  • при включенных SSL 2/3 - Ошибка 80072f7d: Ошибка поддержки безопасных каналов.
  • при включенном TLS 1.0 - Ошибка 80072f99: В сертификате клиента отсутствовали учетные данные.
По коду:
Строки с закомментированными опциями - все то, что я пробовал, чтобы запрос улетел.
Строки с закомментированными заголовками - все заголовки, которые были добавлены Rest Api Client'ом (кроме Host, это отсебятина). Основные, что требуются - это Authorization, Client-Login, Content-Type и Accept-Language.
Также пробовал использовать XMLHTTP2 v6.0 для отправки запроса, ошибки аналогичные, только их коды другие.

Возможно, Excel действительно не предназначен для таких запросов, но хочется верить, что все получится :)
Если есть замечания по обработке статусов http или еще чему, принимаю критику, но первостепенная задача - отправка запроса, а дальше уже гори оно огнем дело техники.

Скрытый текст
 
Так может пойти простым путем, написать скрипт на питоне, который будет тянуть данные и записывать их куда вам необходимо?  
 
Цитата
при включенных SSL 2/3
вроде как, это не включить

Цитата
при включенном TLS 1.0
1.0 используется по умолчанию, это включать не надо
Можно включить 1.1 / 1.2, см. инструкцию:
https://excelvba.ru/programmes/Parser/manuals/errors/WinHTTP_TLS

Цитата
что требуются - это Authorization, Client-Login, Content-Type и Accept-Language
с этим проблем нет, это всё работает

Цитата
с использованием сертификата
Сертификат-то нужно?
В вашем коде ничего нет касательно сертификата
См. метод SetClientCertificate объекта WinHttpRequest

Цитата
пробовал использовать XMLHTTP2 v6.0
Это не нужно. Продолжайте использовать WinHttpRequest
 
Цитата
Можно включить 1.1 / 1.2
Запускаю макрос на Windows 10 Pro с последними обновлениями. В справке майкрософта сказано, что, начиная с Windows 8, по умолчанию используются TLS 1.0, 1.1 и 1.2.
Цитата
Сертификат-то нужно?
В вашем коде ничего нет касательно сертификата
См. метод SetClientCertificate объекта WinHttpRequest
Пробовал .SetClientCertificate "LOCAL_MACHINE\Root\Certum", получаю ошибку "В сертификате клиента отсутствовали учетные данные.". Опять же из справки, можно указать только путь до хранилища сертификата без его имени, например, "LOCAL_MACHINE\Root\", нужный сертификат будет выбран автоматически. Так тоже пробовал, ошибка аналогичная.
В моем коде сертификат устанавливается строкой .Option(WinHttpRequestOption_SelectCertificate) = "LOCAL_MACHINE\Root\". Если раскомментить, ошибка аналогичная.

Все это время искал альтернативный способ, но увы, ограничиться только VBA не получается.
Нашел какое-то решение с использованием библиотеки WinInet, но в итоге выяснил, что https она не использует, только http или ftp.

У меня закончились идеи, я сдаюсь  :cry:  
 
Нашлось решение. Все же использовал объект XMLHTTP60 для отправки запроса. Сначала отправил запрос с пустым телом, получил ошибку и после этого началась магия, скорее всего на стороне Яндекса. Но это лишь догадка человека, далекого от серверных и админских дел. После этих манипуляций запросы стали улетать корректно. Проверено на нескольких машинах, именно такие манипуляции приводят к успеху. Если есть знатоки, которые способны это объяснить, дайте знать причину такого поведения.
Страницы: 1
Наверх