Имя: Пароль:
1C
1С v8
Помогите с Get запросом, HTTPСоединение, HTTPЗапрос, Получить
, ,
0 Desna
 
22.09.15
17:59
в общем есть код на 1с
он не пашет с этим ресурсом

Процедура КнопкаВыполнитьНажатие(Кнопка)
    //примерчик гет запроса
    //https://web.fort-monitor.ru/api/Api.svc/objsensorslist?id=68    
    
    Сервер = "https://web.fort-monitor.ru";;
    
    HTTP =  Новый HTTPСоединение(Сервер,,"demo","demo");
    
    ФайлРезультата ="D:\Temp\out.txt";
    HTTPЗапросФорт3= Новый HTTPЗапрос("/api/Api.svc/fullobjinfo?oid=68");    
    //http://web.fort-monitor.ru/api/Api.svc/connect?login=demo&password=demo&lang=ru-ru&timezone=4    
    
    Попытка
        HTTP.Получить(HTTPЗапросФорт3,ФайлРезультата);    
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;    
    
    Ответ = Новый ТекстовыйДокумент();
    Ответ.Прочитать(ФайлРезультата, КодировкаТекста.UTF8);
    ТекстОтвета = Ответ.ПолучитьТекст();
КонецПроцедуры


а вот код на Си
он пашет
using System;
using System.IO;
using System.Net;

namespace ConsoleTestsCSharp
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                // Создание заспроса
                string requestText = "https://web.fort-monitor.ru/api/api.svc/connect?login=demo&password=demo&lang=ru-ru&timezone=5";;
                HttpWebRequest request = (HttpWebRequest)WebRequest.CreateHttp(requestText);
                request.CookieContainer = new CookieContainer();
                // Получение ответа
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                // Сохранение куки
                CookieCollection cookies = response.Cookies;
                // Чтение ответа
                Stream stream = response.GetResponseStream();
                StreamReader reader = new StreamReader(stream);
                string responseText = reader.ReadToEnd();
                // Вывод текста запроса
                Console.WriteLine("Request text: " + requestText + Environment.NewLine);
                // Вывод текста ответа
                Console.WriteLine("Response text: " + responseText + Environment.NewLine);
                reader.Close();
                response.Close();
                // Создание второго запроса
                requestText = "https://web.fort-monitor.ru/api/api.svc/gettree?all=true";;
                request = (HttpWebRequest)WebRequest.CreateHttp(requestText);
                // Установка сохраненных куки
                request.CookieContainer = new CookieContainer();
                foreach (Cookie item in cookies)
                    request.CookieContainer.Add(item);
                response = (HttpWebResponse)request.GetResponse();
                cookies = response.Cookies;
                stream = response.GetResponseStream();
                reader = new StreamReader(stream);
                responseText = reader.ReadToEnd();
                Console.WriteLine("Request text: " + requestText + Environment.NewLine);
                Console.WriteLine("Response text: " + responseText + Environment.NewLine);
                reader.Close();
                response.Close();
            }
            catch (Exception error)
            {
                Console.WriteLine("ERROR!" + error.Message);
                Console.ReadKey();
            }
        }
    }
}

чего его в 1с допилить надо?
1 oleg_km
 
22.09.15
18:03
Сервер = "https://web.fort-monitor.ru";;;

Надо

Сервер = "web.fort-monitor.ru";

А в

HTTP =  Новый HTTPСоединение(Сервер,,"demo","demo");
надо еще последний параметр добавить про SSL.
2 Desna
 
22.09.15
18:06
(1) я уже так пробовал
если SSL добавить точно файл в темпе будет?
3 Desna
 
22.09.15
18:06
так не пашет
Процедура КнопкаВыполнитьНажатие(Кнопка)
    //примерчик гет запроса
    //https://web.fort-monitor.ru/api/Api.svc/objsensorslist?id=68    
    
    Сервер = "web.fort-monitor.ru";
    
    HTTP =  Новый HTTPСоединение(Сервер,,"demo","demo");
    
    ФайлРезультата ="D:\Temp\out.txt";
    HTTPЗапросФорт3= Новый HTTPЗапрос("/api/Api.svc/fullobjinfo?oid=68");    
    //http://web.fort-monitor.ru/api/Api.svc/connect?login=demo&password=demo&lang=ru-ru&timezone=4    
    
    Попытка
        HTTP.Получить(HTTPЗапросФорт3,ФайлРезультата);    
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;    
    
    Ответ = Новый ТекстовыйДокумент();
    Ответ.Прочитать(ФайлРезультата, КодировкаТекста.UTF8);
    ТекстОтвета = Ответ.ПолучитьТекст();
КонецПроцедуры
4 Desna
 
22.09.15
18:40
(1) заработало!
5 Desna
 
22.09.15
21:20
не заработало
теперь выдает
"result":"NoAuth"
6 Desna
 
22.09.15
21:22
тут что-то с куками намешано
видите как в Си сие работает

HttpWebRequest request = (HttpWebRequest)WebRequest.CreateHttp(requestText);

                request.CookieContainer = new CookieContainer();

что за кукиконтейнер, где оно в 1с?
7 trad
 
22.09.15
21:38
Куки в хидерах
8 Desna
 
22.09.15
21:51
я изучил вот
v8: Получение Куков (Cookies) на 1С

ЗаголовокHTTP = Новый Соответствие();
ЗаголовокHTTP.Вставить("Host", СерверИсточник);
ЗаголовокHTTP.Вставить("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9) Gecko/2008051206 Firefox/3.0 (.NET CLR 3.5.30729)");
ЗаголовокHTTP.Вставить("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
ЗаголовокHTTP.Вставить("Accept-Language", "ru");
ЗаголовокHTTP.Вставить("Accept-Encoding", "gzip,deflate");
ЗаголовокHTTP.Вставить("Accept-Charset", "windows-1251");
ЗаголовокHTTP.Вставить("Keep-Alive", "300");
ЗаголовокHTTP.Вставить("Connection", "keep-alive");
ЗаголовокHTTP.Вставить("Referer", СерверИсточник);
    
Попытка
   НТТР.Получить("Адрес отправления",  ИмяФайлаОтвета, ЗаголовокHTTP);
9 Desna
 
22.09.15
21:52
+(8) смотрю описание метода Получить в 8.3,

третьего параметра в Получить уже нет.

Получить(<HTTPЗапрос>, <ИмяВыходногоФайла>)

как куки то запихнуть?
10 trad
 
22.09.15
21:56
Куки это заголовок с именем cookie
Заголовки передаются в конструктор запроса
11 Desna
 
22.09.15
22:01
(10) нету тут cookie в таблице Список заголовков HTTP
https://ru.wikipedia.org/wiki/Список_заголовков_HTTP#.D0.9E.D0.B1.D0.B7.D0.BE.D1.80.D0.BD.D0.B0.D1.8F_.D1.82.D0.B0.D0.B1.D0.BB.D0.B8.D1.86.D0.B0

каком конструкторе?
12 trad
 
22.09.15
22:24
Конструктор объекта HTTPЗапрос
13 trad
 
22.09.15
22:27
14 Desna
 
22.09.15
22:32
(13) во дела, надо такое в инглише сразу смотреть что ли
(12) что за конструктор, выпадающие после точки доступные методы что ли в тексте?
15 trad
 
22.09.15
22:34
Во дела, вот конструктор:
Новый HTTPЗапрос
16 Desna
 
22.09.15
22:39
(15) дай пример как запихнуть куки в гет запросе, а.
17 Desna
 
22.09.15
22:48
(15) конструктор запроса брал, конструктор запросов в управляемом приложении брал, конструктор HTTPЗапроса не, не брал
18 trad
 
22.09.15
22:50
Кода под рукой нет - пишу с тела
у тебя выше соответствие, в него вставляешь элемент с именем cookie и значением - строка с перечислением твоих куков. Это соответствие передаешь в конструктор запроса, синтаксис в СП.
19 Desna
 
22.09.15
22:52
(18) это я уже разобрал, да, спасибо, пробую
20 trad
 
22.09.15
22:54
(17) ммм, я не про эти конструкторы, а про конструктор как элемент синтаксиса языка
21 Desna
 
22.09.15
22:58
(20) то я же и спросил так сразу ", выпадающие после точки доступные методы что ли в тексте?"

только с куками то все равно беда, чтобы куки запихнуть их надо сначала получить

// Сохранение куки

                CookieCollection cookies = response.Cookies;

видишь как в Си шарпе

   string requestText = "https://web.fort-monitor.ru/api/api.svc/connect?login=demo&password=demo&lang=ru-ru&timezone=5";;;

                HttpWebRequest request = (HttpWebRequest)WebRequest.CreateHttp(requestText);
22 Desna
 
22.09.15
22:59
как видим CreateHttp<>Новый HTTPСоединение
23 trad
 
22.09.15
23:01
Конструктор - это конструктор, а не метод и после точки не вываливается
24 Desna
 
22.09.15
23:03
(23) давай лучше скажи как после конструктора "Новый HTTPСоединение" куки выловить, а?
25 trad
 
22.09.15
23:05
Давай без давай, да
26 Desna
 
22.09.15
23:13
(25) есть прогресс
HTTP =  Новый HTTPСоединение(Сервер,,,,,,ssl);
HTTPЗапросФорт3= Новый HTTPЗапрос("/api/api.svc/connect?login=demo&password=demo&lang=ru-ru&timezone=5");

в файле "Ок", но!
HTTPЗапросФорт3.Заголовки.Количество()=0

как куки то отловить или сразу готовый какие подсунуть?
27 Vladal
 
22.09.15
23:18
У нас в форт-монитор стучится скуль, забирает себе их данные и уже дальше из своей базы, на своем локальном серврере, я беру данные.
28 Desna
 
22.09.15
23:19
(27) во 2-ой или 3-ий Фортмонитор?
29 trad
 
22.09.15
23:24
Если хочешь посмотреть куки, которые сервер выдает, то смотри заголовки ответа, а не запроса
30 Desna
 
22.09.15
23:33
(29) в ответе
https://web.fort-monitor.ru/api/api.svc/connect?login=demo&password=demo&lang=ru-ru&timezone=5

"Ок"

а куки в на странице в браузере вижу, а в 1с где его отловить то?
31 Desna
 
22.09.15
23:35
не вижу в ответе никаких заголовков
https://gyazo.com/c92ea8dc8b7990797daa4896bd52dd35
32 Desna
 
22.09.15
23:35
тут либо 1с что- то не допилила, либо фортмонитор
33 trad
 
22.09.15
23:38
Я про httpответ, не про httpсоединение
34 Desna
 
22.09.15
23:44
(33) ооо, спасибо, все лучше и лучше!
https://gyazo.com/e6a6a5e99a12211621d0ea7e919bb9f9
35 trad
 
22.09.15
23:47
Вот, и берешь значение setcookie ответа и вставляшь его в cookie запроса
36 Desna
 
23.09.15
00:02
(35) спасибо огромное! работает!!!!
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший