Имя: Пароль:
1C
 
Отправить длинную JSON строку.
0 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);

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

Но сервер вообще ничего не возвращает, даже код ошибки.
10 Asmody
 
01.07.18
16:47
Это кто придумал json в параметрах get-запроса отправлять?!
11 antihacker
 
01.07.18
16:52
А POST - ом как отправить ?
12 antihacker
 
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Запрос);
13 antihacker
 
01.07.18
16:53
тоже самое
14 antihacker
 
01.07.18
17:10
А вообще можно отправлять длинные JSON  сроки ? Или их надо отправить в тексовом файле.

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

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


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


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


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