Имя: Пароль:
1C
1С v8
Получение отчёта с сайта через POST и GET запросы
0 nikolas260579
 
22.06.17
10:33
Всем добрый день. Пытаюсь получить отчёт с сайта. На сайте на кнопочке "Сформировать отчёт" висит пост-запрос, у которого в ответе есть такой параметр: ReportId. Дальше этот параметр передается в URL GET - запроса, и гет - запрос выполняется несколько раз до тех пор, пока параметр "status" в его ответе не сменится с 0 на 2. При этом в ответе формируется ещё один параметр ReportDataId, я так понимаю, по нему и нужно будет загружать отчёт.Становится доступна ссылка "Загрузить", при этом никаких запросов нет, просто открывается окно с выбором открыть или сохранить файл.
Вопросы у меня такие: ReportId из пост запроса я получил, но как правильно сделать гет? В отдельной процедуре и повторять её же до тех пор пока статус в ответе гет-запроса не будет равен 2? И как правильно получить файл с отчётом - через ФайлРезультата = ПолучитьИмяВременногоФайла(xls) и далее читать его оттуда? Или как-то иначе?
Буду благодарен за любые советы. Формы обычные, платформа 8.3
1 sFAQer
 
22.06.17
10:35
(0) Обратись к разработчику сайта
2 Адинэснег
 
22.06.17
10:35
пздц каша
3 nikolas260579
 
22.06.17
10:38
(1)обращался, пока ничего путного, открытых апи нет.
4 lodger
 
22.06.17
10:47
почитайте что такое WebService, ws-ссылки и SOAP в 1с.
5 sFAQer
 
22.06.17
10:53
(4) Как ему это поможет с каким то левым сайтом?
6 nikolas260579
 
22.06.17
11:06
(5)пока не знаю, как поможет, просто читаю информацию. Делаю же так: из пост-запроса получил параметр ReportID, пишу гет-запрос


URLЗапроса = Строка("/api/report/"+ReportID+"/status");
                 ЗаголовкиGET = Новый Соответствие;
      ЗаголовкиGET.Вставить("Cookie", Кук);
      //URLЗапроса = Строка("/api/report/fiscaldocument/generate?outletId=&kktId=&beginDate="+ДатаНачала+"&endDate="+ДатаКонца+"&documentType=&accountingType=&paymentType=");
      GET_Запрос = Новый HTTPЗапрос(URLЗапроса,ЗаголовкиGET);
      Соединение.ВызватьHTTPМетод("GET",GET_Запрос);
      HTTPОтвет = Соединение.Получить(GET_Запрос,Файл1);
      Если HTTPОтвет.КодСостояния = 200 ТОгда
          ТекстовыйФайлОтвета = Новый ТекстовыйДокумент;
          ТекстовыйФайлОтвета.Прочитать(Файл1, КодировкаТекста.UTF8);
          СтрокаОтветаСервера = ТекстовыйФайлОтвета.ПолучитьТекст();
          
          //ищем статус или сверяем репортдатаид
          Поз = Найти(СтрокаОтветаСервера,"""status""");
          Если Поз>0 Тогда
              Строка1 = Сред(СтрокаОтветаСервера,Поз);
              Поз1 = Найти(Строка1,":");
              Если Поз1>0 Тогда
                  Строка2 = Сред(Строка1,Поз1+1,1);//по идее бы на цифры проверить
                  
                  Если Строка2 = "0" Тогда
                    //повторяем гет-запрос?  
                  ИначеЕсли Строка2 = "2" Тогда
                      Сообщить("отчет где-то есть");
                      
                  КонецЕсли;
                  
                  
                  
              КонецЕсли;
          
          Иначе  
          КонецЕсли;
          
          
      Иначе
          
      КонецЕсли;

В результате получаю статус 0. Повторять его до тех пор, пока не получу статус 2?
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший