Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Есть запрос к АПИ сайта написан на PHP. Как его реализовать через 1С?
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
maksyandra
Есть запрос к АПИ сайта написан на PHP. Как его реализовать через 1С???
Сам запрос
<?php
    $url="https://api.site.com.ua/api/API_METHOD"; //адрес api
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, array (
        'login' => 'YOUR_LOGIN',
        'password' => 'YOUR_PASSWORD',
        'доппараметр' => 'значение_доппараметра'
    )); //параметры запроса
    curl_setopt($ch, CURLOPT_URL, $url);
    $output = curl_exec($ch); //ответ
    curl_close($ch);
?>
Vofka
Смотрите в сторону HTTPЗапроса и HTTPСоединения.
maksyandra
Vofka @ Сегодня, 17:31 необходимо зарегистрироваться для просмотра ссылки,
Можно поподробнее?? А то что-то у меня не выходит.
Vofka
maksyandra, откуда не выходит?
maksyandra
Vofka @ Сегодня, 17:56 необходимо зарегистрироваться для просмотра ссылки,
Из 1С
Vofka
А, ну тогда всё понятно.

Что конкретно не получается?
maksyandra
Отправляю
ssl=Новый ЗащищенноеСоединениеOpenSSL(
    Неопределено,
    Новый СертификатыУдостоверяющихЦентровWindows());
    ХТТПСоединение = Новый HTTPСоединение("api.dclink.com.ua",,,,,0,ssl);
  
    ЗаголовокHTTP = Новый Соответствие();
    ЗаголовокHTTP.Вставить("Content-Type", "application/x-www-form-urlencoded");

    Запрос = Новый HTTPЗапрос("/api/GetCategories",ЗаголовокHTTP);
    Запрос.УстановитьТелоИзСтроки("&login=логин&password=пароль", "UTF-8",ИспользованиеByteOrderMark.НеИспользовать);//Дело было в этой строке

    ХТТПОтвет = ХТТПСоединение.ОтправитьДляОбработки(Запрос);
    Сообщить(ХТТПОтвет.ПолучитьТелоКакСтроку("UTF-8"));




 ! 

Правила, пункт 1
 


Получаю пустую строку
logist
Цитата(maksyandra @ 24.03.16, 18:37) необходимо зарегистрироваться для просмотра ссылки
&login=логин&password=пароль

это параметры, они должны быть в адресе, а не в теле

Запрос = Новый HTTPЗапрос("/api/GetCategories/?login=логин&password=пароль",ЗаголовокHTTP);
maksyandra
logist @ Сегодня, 19:02 необходимо зарегистрироваться для просмотра ссылки,
Все равно пусто
BigProblem
maksyandra @ Сегодня, 18:20 необходимо зарегистрироваться для просмотра ссылки,
Посмотрите отладчиком что находится в ХТТПОтвет (в частности ХТТПОтвет.КодСостояния - возможно идет редирект куда-то или еще какая ошибка, о которой в ХТТПОтвет.Заголовки можно поискать)

Цитата
Запрос.УстановитьТелоИзСтроки("&login=логин&password=пароль", "UTF-8",ИспользованиеByteOrderMark.НеИспользовать);

Еще вот это попробуйте переписать вот так:
Запрос.УстановитьТелоИзСтроки("login="+КодироватьСтроку(логин,СпособКодированияСтроки.КодировкаURL)+"&password="+КодироватьСтроку(пароль,СпособКодированияСтроки.КодировкаURL), "UTF-8",ИспользованиеByteOrderMark.НеИспользовать);


Ну и еще можно попробовать (хотя это соломинка, которая редко помогает):
ЗаголовокHTTP.Вставить("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36");


В крайнем случае - вшить куда-то компоненту curl и запускать ее через COMОбъект("WScript.Shell"). Как-то вот так:
...
    ИмяФайлаКУРЛ = КаталогВременныхФайлов()+"CURL.exe";
    ИмяФайлаКУРЛ = Новый Файл(ИмяФайлаКУРЛ);
    Если НЕ ИмяФайлаКУРЛ.Существует() Тогда
        КУРЛ = ЭтотОбъект.ПолучитьМакет("CURL");
        КУРЛ.Записать(ИмяФайлаКУРЛ.ПолноеИмя);
    КонецЕсли;
    ФайлСертификатов = КаталогВременныхФайлов()+"curl-ca-bundle.crt";
    ФайлСертификатов = Новый Файл(ФайлСертификатов);
    Если НЕ ФайлСертификатов.Существует() Тогда
        СЕРТИФИКАТ = ЭтотОбъект.ПолучитьМакет("CurlCert");
        СЕРТИФИКАТ.Записать(ФайлСертификатов.ПолноеИмя);
    КонецЕсли;

    ВремФайл = ПолучитьИмяВременногоФайла("txt");
    Скрипт = Новый COMОбъект("WScript.Shell");
    СтрокаКоманды = ТУТ_НАДО_СФОРМИРОВАТЬ_ПРАВИЛЬНУЮ_СТРОКУ_КОМАНДЫ_ДЛЯ_CURL;
    Скрипт.Run(СтрокаКоманды,0,Истина);
...
Petre
Цитата(logist @ 24.03.16, 18:02) необходимо зарегистрироваться для просмотра ссылки
это параметры, они должны быть в адресе, а не в теле

Не факт. Видел обе вариации.
maksyandra @ Вчера, 18:20 необходимо зарегистрироваться для просмотра ссылки,
Посмотрите запрос и ответ в fiddler.
maksyandra
BigProblem @ 24.03.16, 20:39 необходимо зарегистрироваться для просмотра ссылки,
Правильный метод
    Логин  = "login"; 
    Пароль = "password"; а
    ЛогинПароль = "login="+ Логин + "&password="+Пароль+"";
    Ресурс = "/api/GetCategories";  
    
    WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
    WinHttp.Option(2,"Windows-1251");
    WinHttp.Open("POST", "https://api.com.ua"+Ресурс,Ложь);
    WinHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=Windows-1251");
    ПараметрыПОСТ = ЛогинПароль;
    WinHttp.Send(ПараметрыПОСТ);
    Ответ = Строка(WinHttp.ResponseText());



 ! 

Правила, п.12
 
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.