|
Отправить длинную 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.НеИспользовать); Возврат Ответ; Клиент получает пустой ответ. Даже код ошибки не видно. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |