Вход | Регистрация


Отпроавить длтнный JSON строку.

Отпроавить длтнный JSON строку.
Я
   antihacker
 
01.07.18 - 14:11
Всем привет !

Вот работающий код, который отправляет в HTTP сервис 1С, JSON строку.

тСоединение = Новый HTTPСоединение("myfoods.kz", 443, ЭтотОбъект.Пользователь, ЭтотОбъект.Пароль,,,Новый ЗащищенноеСоединениеOpenSSL( неопределено, неопределено ),);  
      
      //Отправим запрос


       тHTTPЗапрос = Новый HTTPЗапрос("/BIS/hs/InDocSinh?Doc_main_data="+вхДанныеДляОтправки.ОсновныеДанныеДокументаJSON+"&ECC_Obligations_List="+вхДанныеДляОтправки.СписокЭКРОбязJSON+"&ECC_Payment_List="+вхДанныеДляОтправки.СписокЭКРПлатежJSON);
       

       
      //ИмяФайлаОтвета = ПолучитьИмяВременногоФайла("txt");

       
       тHTTPОтвет =  тСоединение.ОтправитьДляОбработки(тHTTPЗапрос);


Но этот код перестает работать, когда JSON длинный. Пишет

HTTP Error 414. The request URL is too long
.
Теперь стараюсь вот так отправить
       тСоединение = Новый HTTPСоединение("myfoods.kz", 443, ЭтотОбъект.Пользователь, ЭтотОбъект.Пароль,,,Новый ЗащищенноеСоединениеOpenSSL( неопределено, неопределено ),);  
      
      //Отправим запрос

       тHTTPЗапрос  = Новый HTTPЗапрос("/BIS/hs/InDocSinh");

       тHTTPЗапрос.Заголовки.Вставить("Content-type", "application/x-www-form-urlencoded");
       
       ИмяФайлаОтвета = ПолучитьИмяВременногоФайла("txt");
      
       тHTTPЗапрос.УстановитьТелоИзСтроки("Doc_main_data="+вхДанныеДляОтправки.ОсновныеДанныеДокументаJSON,КодировкаТекста.UTF8,ИспользованиеByteOrderMark.НеИспользовать);

       
       тHTTPЗапрос.УстановитьТелоИзСтроки("&ECC_Obligations_List="+вхДанныеДляОтправки.СписокЭКРОбязJSON,КодировкаТекста.UTF8,ИспользованиеByteOrderMark.НеИспользовать);
       
       тHTTPЗапрос.УстановитьТелоИзСтроки("&ECC_Payment_List="+вхДанныеДляОтправки.СписокЭКРПлатежJSON,КодировкаТекста.UTF8,ИспользованиеByteOrderMark.НеИспользовать);
       
       тHTTPОтвет =  тСоединение.ОтправитьДляОбработки(тHTTPЗапрос,ИмяФайлаОтвета);


Но сервер не может обработать строку запроса. 

Ошибка при вызове метода контекста (УстановитьСтроку)

Это здесь 

    
        Doc_main_data        = Запрос.ПараметрыЗапроса.Получить("Doc_main_data");

                 
        //Данные документа

        ЧтениеJSON = Новый ЧтениеJSON;
        ЧтениеJSON.УстановитьСтроку(Doc_main_data);

Что я не правильно делаю ?
 
 
   asady
 
1 - 01.07.18 - 14:26
(0) тупо через определенные промежутки вставь Символы.ПС
   antihacker
 
2 - 01.07.18 - 14:27
НЕ очень понял
   asady
 
3 - 01.07.18 - 14:35
(2) тупо разбей строку вхДанныеДляОтправки.ОсновныеДанныеДокументаJSON на подстроки вставив Символы.ПС через 255 символов например
   antihacker
 
4 - 01.07.18 - 14:40
Извини, не могу понять. А как потом отправить одним   параметром ?
   asady
 
5 - 01.07.18 - 14:45
(4)
mylongstring="my very very long string";
mylongmultistring = "my very"+Символы.ПС.+" very long"+Символы.ПС.+" string";
   PR
 
6 - 01.07.18 - 14:59
Мда
   sechs
 
7 - 01.07.18 - 15:04
(0) И как ты думаешь, что будет, если три раза подряд УстановитьТелоИзСтроки ?
   antihacker
 
8 - 01.07.18 - 15:07
Да, да. Вот и пробую


      
       тСоединение = Новый HTTPСоединение("myfoods.kz", 443, ЭтотОбъект.Пользователь, ЭтотОбъект.Пароль,,,Новый ЗащищенноеСоединениеOpenSSL( неопределено, неопределено ),);  
      
       //Отправим запрос
       //тHTTPЗапрос  = Новый HTTPЗапрос("/BIS/hs/InDocSinh");
          ЗаголовокHTTP = Новый Соответствие();
    ЗаголовокHTTP.Вставить("POST", "/BIS/hs/InDocSinh?Doc_main_data="+вхДанныеДляОтправки.ОсновныеДанныеДокументаJSON+"&ECC_Obligations_List="+вхДанныеДляОтправки.СписокЭКРОбязJSON+"&ECC_Payment_List="+вхДанныеДляОтправки.СписокЭКРПлатежJSON);
    ЗаголовокHTTP.Вставить("Host:", "myfoods.kz");
    ЗаголовокHTTP.Вставить("Content-Type", "application/json; charset=utf-8");    
       //тHTTPЗапрос = Новый HTTPЗапрос("/BIS/hs/InDocSinh?Doc_main_data="+вхДанныеДляОтправки.ОсновныеДанныеДокументаJSON+"&ECC_Obligations_List="+вхДанныеДляОтправки.СписокЭКРОбязJSON+"&ECC_Payment_List="+вхДанныеДляОтправки.СписокЭКРПлатежJSON);
         ИмяФайлаОтвета = ПолучитьИмяВременногоФайла("txt");
тHTTPЗапрос = Новый HTTPЗапрос("http://myfoods.kz",ЗаголовокHTTP);


       тHTTPОтвет =  тСоединение.ОтправитьДляОбработки(тHTTPЗапрос,ИмяФайлаОтвета);


Пишет

HTTP Error 400. The request has an invalid header name.
   antihacker
 
9 - 01.07.18 - 15:39
Вот так должен был зараюотать       тСоединение = Новый HTTPСоединение("myfoods.kz", 443, ЭтотОбъект.Пользователь, ЭтотОбъект.Пароль,,,Новый ЗащищенноеСоединениеOpenSSL( неопределено, неопределено ),);  
      
      //Отправим запрос

//      //тHTTPЗапрос = Новый HTTPЗапрос("/BIS/hs/InDocSinh?Doc_main_data="+вхДанныеДляОтправки.ОсновныеДанныеДокументаJSON+"&ECC_Obligations_List="+вхДанныеДляОтправки.СписокЭКРОбязJSON+"&ECC_Payment_List="+вхДанныеДляОтправки.СписокЭКРПлатежJSON);

         ИмяФайлаОтвета = ПолучитьИмяВременногоФайла("txt");
       тHTTPЗапрос = Новый HTTPЗапрос("/BIS/hs/InDocSinh?");
       тHTTPЗапрос.УстановитьТелоИзСтроки("Doc_main_data="+вхДанныеДляОтправки.ОсновныеДанныеДокументаJSON+"&ECC_Obligations_List="+вхДанныеДляОтправки.СписокЭКРОбязJSON+"&ECC_Payment_List="+вхДанныеДляОтправки.СписокЭКРПлатежJSON,КодировкаТекста.UTF8,ИспользованиеByteOrderMark.НеИспользовать);
       
       тHTTPОтвет =  тСоединение.ОтправитьДляОбработки(тHTTPЗапрос,ИмяФайлаОтвета);

Но сервер вообще ничего не возвращает, даже код ошибки.
   Asmody
 
10 - 01.07.18 - 16:47
Это кто придумал json в параметрах get-запроса отправлять?!
 
 Рекламное место пустует
   antihacker
 
11 - 01.07.18 - 16:52
А POST - ом как отправить ?
   antihacker
 
12 - 01.07.18 - 16:52
тHTTPЗапрос = Новый HTTPЗапрос("POST");
      ////тHTTPЗапрос.УстановитьТелоИзСтроки("Doc_main_data="+вхДанныеДляОтправки.ОсновныеДанныеДокументаJSON+"&ECC_Obligations_List="+вхДанныеДляОтправки.СписокЭКРОбязJSON+"&ECC_Payment_List="+вхДанныеДляОтправки.СписокЭКРПлатежJSON,КодировкаТекста.UTF8,ИспользованиеByteOrderMark.НеИспользовать);

       тHTTPЗапрос.УстановитьТелоИзСтроки("Doc_main_data="+вхДанныеДляОтправки.ОсновныеДанныеДокументаJSON);
       тHTTPЗапрос.Заголовки.Вставить("Content-type", "application/x-www-form-urlencoded; charset=utf-8");

       тHTTPОтвет =  тСоединение.ОтправитьДляОбработки(тHTTPЗапрос);
   antihacker
 
13 - 01.07.18 - 16:53
тоже самое
   antihacker
 
14 - 01.07.18 - 17:10
А вообще можно отправлять длинные JSON  сроки ? Или их надо отправить в тексовом файле.

Кстати. Со строны HTTP сервиса получаю так
Ответ = Новый HTTPСервисОтвет(200);

        Doc_main_data        = Запрос.ПараметрыЗапроса.Получить("Doc_main_data");


        Ответ.УстановитьТелоИзСтроки(Doc_main_data, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);


    
    Возврат Ответ;


Клиент получает пустой ответ. Даже код ошибки не видно.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует