Имя: Пароль:
1C
1С v8
Получить JSON через HTTP-запрос
,
0 nemoxp
 
06.05.19
12:33
Здравствуйте!

Платформа 8.3. Пытаюсь получить JSON через http-запрос, прошу помощи. Как только не писал - ничего не выходит. Один из вариантов:

WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Open("GET", "https://vpn.bisoft.fi:44304/login?username=log_expeditor&password=log_expeditor1&command=query&qry_name=stock%20report%20extended&date%20min=2019-01-01T00:00:00.000&date%20max=2019-06-01T00:00:00.000";, 0);
WinHttp.Send();
WinHttp.SetTimeouts(15000, 15000, 15000, 15000);
Результат = WinHttp.ResponseText();

Выдает ошибку:

Ошибка при вызове метода контекста (Send) WinHttp.Send();
по причине: Произошла исключительная ситуация (WinHttp.WinHttpRequest): A connection with the server could not be established


Если скопировать адрес в браузер - все работает.
1 arsik
 
гуру
06.05.19
12:42
(0) Зачем использовать "COMОбъект("WinHttp.WinHttpRequest.5.1")"? Есть же стандартный в 1С встроенный. Примеров навалом.
2 nemoxp
 
06.05.19
12:49
(1) Например "HTTPСоединение"?
мой пример:

Соединение = Новый HTTPСоединение("vpn.bisoft.fi:44304",443);    
Запрос = Новый HTTPЗапрос("/login?username=log_expeditor&password=log_expeditor1&command=query&qry_name=stock%20report%20extended&date%20min=2019-01-01T00:00:00.000&date%20max=2019-06-01T00:00:00.000");     
Ответ = Соединение.Получить(Запрос);

Ошибка:
Ошибка при вызове метода контекста (Получить)
Ответ = Соединение.Получить(Запрос);
по причине: Ошибка работы с Интернет: Server returned nothing (no headers, no data)

Напоминаю, что если вводить в строку адреса браузера, то все работает:
https://vpn.bisoft.fi:44304/login?username=log_expeditor&password=log_expeditor1&command=query&qry_name=stock%20report%20extended&date%20min=2019-01-01T00:00:00.000&date%20max=2019-06-01T00:00:00.000
3 Вафель
 
06.05.19
12:54
(2) а где ты указал, что это https ?
4 lubitelxml
 
06.05.19
12:55
(2) про заголовки не забывай
5 nemoxp
 
06.05.19
12:59
(3) Соединение = Новый HTTPСоединение("vpn.bisoft.fi:44304",443);    
443 - типа https

(4) какие заголовки указать?
6 dezss
 
06.05.19
13:01
(5) https - это защищенной соединение.
и порт у тебя вроде не 443, а 44304
7 dezss
 
06.05.19
13:02
(6) + Новый HTTPСоединение(Сервер,Порт,,,,ТаймАут,Новый ЗащищенноеСоединениеOpenSSL)
8 NWsFF
 
06.05.19
13:07
Соединение = Новый HTTPСоединение("vpn.bisoft.fi:44304",,,,,,Новый ЗащищенноеСоединениеOpenSSL());    
    Запрос = Новый HTTPЗапрос("/login?username=log_expeditor&password=log_expeditor1&command=query&qry_name=stock%20report%20extended&date%20min=2019-01-01T00:00:00.000&date%20max=2019-06-01T00:00:00.000");    
    Ответ = Соединение.Получить(Запрос);

все работает
9 nemoxp
 
06.05.19
13:18
(8) Большое спасибо!
10 nemoxp
 
06.05.19
13:54
Добавил сохранение в файл:

Соединение = Новый HTTPСоединение("vpn.bisoft.fi:44304",,,,,,Новый ЗащищенноеСоединениеOpenSSL());    
    Запрос = Новый HTTPЗапрос("/login?username=log_expeditor&password=log_expeditor1&command=query&qry_name=stock%20report%20extended&date%20min=2019-01-01T00:00:00.000&date%20max=2019-06-01T00:00:00.000");    
    
    Режим = РежимДиалогаВыбораФайла.Сохранение;
    ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
    ДиалогОткрытияФайла.Фильтр = НСтр("ru = 'Файл'") + "(*.txt)|*.txt";
    ДиалогОткрытияФайла.Заголовок = "Выберите путь и имя файла";
    ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
    Если ДиалогОткрытияФайла.Выбрать() Тогда
        Ответ = Соединение.Получить(Запрос, ДиалогОткрытияФайла.ПолноеИмяФайла);
    КонецЕсли;


Сохраняет в ANSI, а нужно, видимо, UTF-8. Не подскажите как указать кодировку?
11 Мимохожий Однако
 
06.05.19
14:56
(10) И где здесь сохранения в файл? СП смотрел?
12 Ёпрст
 
06.05.19
15:04
(10) смотри через HttpОтвет и там ПолучитьТелоКакСтроку с указанием кодировки
13 nemoxp
 
06.05.19
15:20
(12) БлагоДарю! Все получилось!
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.