Имя: Пароль:
1C
1С v8
Сложности с Post запросом
0 Vadimok
 
06.12.16
07:31
Возникла необходимость загрузки актуальных кодов ТНВЭД. На сайте kgd.gov.kz есть актуальный справочник с кодами. Пишу код чтобы получить данные

HTTPСоединение = Новый HTTPСоединение("kgd.gov.kz");
HTTPЗапрос = Новый HTTPЗапрос("/tnved/otvet.php?limit=10&Code_ID=li_id_III&Level_ID=li_cl_1+li_cl_clic&FromAjax=true");
HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
HTTPОтвет    = HTTPСоединение.Получить(HTTPЗапрос);
ДанныеОтвета = HTTPОтвет.ПолучитьТелоКакСтроку();

Данные приходят но всегда одни и те же, приходит первая страница т.е. огловление.
а данные должны меняться исходя из этой строки
limit=10&Code_ID=li_id_III&Level_ID=li_cl_1+li_cl_clic&FromAjax=true
вернее Code_ID=li_id_III И Level_ID=li_cl_1+li_cl_clic
но что то не так, подскажите может я делаю что то не так?
1 Повелитель
 
06.12.16
07:35
(0) Актуальная тема.
Мне тоже эти коды нужны.
2 Vadimok
 
06.12.16
09:35
Тема закрыта, вопрос решен привожу работоспособный код

    HTTPСоединение = Новый HTTPСоединение("kgd.gov.kz");
    
    // Получим временный файл для передачи в теле POST запроса
    ФайлТелаЗапроса = ПолучитьИмяВременногоФайла();
    
    // Запишем в файл содержимое тела запроса (текст)
    ТекстФайл = Новый ТекстовыйДокумент;
    ТекстФайл.УстановитьТекст("limit=10&Code_ID=li_id_01012&Level_ID=li_cl_4+li_cl_click&FromAjax=true");
    ТекстФайл.Записать(ФайлТелаЗапроса, КодировкаТекста.UTF8);
    
    // Получим размер данных для передачи в заголовок
    ФайлНаОтправку = Новый Файл(ФайлТелаЗапроса);
    РазмерФайлаНаОтправку = XMLСтрока(ФайлНаОтправку.Размер());
    
    // Получим временный файл — тело ответа POST запроса
    ФайлРезультат = ПолучитьИмяВременногоФайла();
    
    // Заголовок создадим в виде соответствия
    ЗаголовокЗапросаHTTP = Новый Соответствие();
    
    // Передаем в заголовках размер и тип данных на отправку
    ЗаголовокЗапросаHTTP.Вставить("Content-Length", РазмерФайлаНаОтправку);
    ЗаголовокЗапросаHTTP.Вставить("Content-Type", "application/x-www-form-urlencoded");
    ЗаголовокЗапросаHTTP.Вставить("Host", "http://www.kgd.gov.kz";);
    
    //Host: http://www.kgd.gov.kz
    //Content-Length: 71
    //Content-Type: application/x-www-form-urlencoded
    
    HTTPЗапрос = Новый HTTPЗапрос("/tnved/otvet.php", ЗаголовокЗапросаHTTP);
    HTTPЗапрос.УстановитьИмяФайлаТела(ФайлТелаЗапроса);
    HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос,ФайлРезультат);
    
    // Получим ответ
    ТекстовыйФайлОтвета = Новый ТекстовыйДокумент;
    ТекстовыйФайлОтвета.Прочитать(ФайлРезультат, КодировкаТекста.UTF8);
    СтрокаОтветаСервера = ТекстовыйФайлОтвета.ПолучитьТекст();

    Сообщить(СтрокаОтветаСервера);
3 oleg_km
 
06.12.16
10:14
Эти заголовки не нужны, их платформа сама сделает:

ЗаголовокЗапросаHTTP.Вставить("Content-Length", РазмерФайлаНаОтправку);

    ЗаголовокЗапросаHTTP.Вставить("Host", "http://www.kgd.gov.kz";;);

Вот этот скорее ключевой заголовок:

    ЗаголовокЗапросаHTTP.Вставить("Content-Type", "application/x-www-form-urlencoded");

неоднократно сталкивался, что без него сервер не обрабатывал запросы.
4 Vadimok
 
06.12.16
11:22
Да из за этого заголовка не работало
5 Serginio1
 
06.12.16
12:55
Ну для начало нужно пользовать ся фиддлером.
Либо более продвинутом HTTPClient

http://catalog.mista.ru/public/466052/
6 Serginio1
 
06.12.16
13:03
Например
Клиент = Врап.СоздатьОбъект(HttpClient);
d = Врап.СоздатьОбъект(Dictionary);
// Устанавливаешь параметры Например
    
            d.set_Item("User", "User");
            d.set_Item("Password", "secret");
            
       Контент=Врап.СоздатьОбъект(FormUrlEncodedContent,d);
        // Отправим пост запрос с данными формы    по адресу находящемся в Action
        резулт=Клиент.PostAsync(Форма.Action,Контент).Result;
        
        // И получим ответ
        res=резулт.Content.ReadAsStringAsync().Result;
7 mehfk
 
06.12.16
13:05
(6) Это уже не смешно.
8 Serginio1
 
06.12.16
13:19
(7) Почему?
9 Mauser
 
06.12.16
13:22
10 Serginio1
 
06.12.16
13:46
Спасибо! Ваши овации бесценны!
11 oleg_km
 
06.12.16
18:46
(10) Он похоже по себя. Стоит сказать .НЕТ и он тут как тут.

Кстати, прикольно. Надо это пространство System.Net.Http посмотреть, правда только с 4.5
12 Serginio1
 
07.12.16
10:21
(11) Да оно только 4.5, но возможностей выше крыши. В том числе за счет расширений.
Просто даже моя обертка компилится как под 4.6.1 так и под 4.0