|   |   | 
| 
 | POST запрос на API с параметрами и json данными | ☑ | ||
|---|---|---|---|---|
| 0
    
        LopesLeonid 27.10.22✎ 14:23 | 
        Всем здравствуйте, требуется помощь.
 Как сделать вот этот код на python в 1С import requests url = 'http://192.168.220.224/api' data = {"number": "001"} params = {'name': 'lina', 'id': '1'} resp = requests.post(url, params=params, json=data) print(resp) | |||
| 1
    
        НафНаф 27.10.22✎ 14:27 | 
        гуглим HTTP-запросы и работу с JSON в 1С     | |||
| 2
    
        ColonelAp4u 27.10.22✎ 14:31 | 
        (0) формируешь структуру из своих параметров и делаешь пост запрос
 ТелоЗапроса = Новый Структура; ТелоЗапроса.Вставить(тут твои параметры); ЗаписьJSON = Новый ЗаписьJSON; ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, " ", Истина); ЗаписьJSON.УстановитьСтроку(ПараметрыJSON); ЗаписатьJSON(ЗаписьJSON, ТелоЗапроса); ТелоЗапроса = ЗаписьJSON.Закрыть(); Настройки = Формируешь струтуру настроек с заголовками SSL = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено); HTTPСоединение = Новый HTTPСоединение(Настройки.Сервер, , , , , ВремяОжиданияОтветаСервис,SSL); // HTTPЗапрос = Новый HTTPЗапрос(Настройки.Ресурс + КодГруппы + "/" + НаименованиеОперации + "?token=" + Токен, Настройки.Заголовки); HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса, КодировкаТекста.UTF8,ИспользованиеByteOrderMark.НеИспользовать); РезультатHTTP = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); РезультатЗапроса.КодОтвета = РезультатHTTP.КодСостояния; РезультатЗапроса.ОтветXML = РезультатHTTP.ПолучитьТелоКакСтроку(); ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(РезультатЗапроса.ОтветXML); Далее читаешь результат ответа | |||
| 3
    
        mikecool 27.10.22✎ 14:31 | 
        парамс видимо заголовки, дата - тело     | |||
| 4
    
        ColonelAp4u 27.10.22✎ 14:33 | 
        HTTPЗапрос = Новый HTTPЗапрос(Настройки.Ресурс, Настройки.Заголовки);     | |||
| 5
    
        Мультук гуру 27.10.22✎ 14:33 | ||||
| 6
    
        LopesLeonid 27.10.22✎ 14:41 | 
        Почему в python это делается в три строчки, а тут такие портянки писать приходится)     | |||
| 7
    
        НафНаф 27.10.22✎ 14:43 | 
        (6) Доступно и всерьез (с)     | |||
| 8
    
        НафНаф 27.10.22✎ 14:44 | 
        (6) можно свою мини-библиотеку написать, тоже будешь в 2 строки умещаться     | |||
| 9
    
        LopesLeonid 27.10.22✎ 14:46 | 
        ЗаписьJSON = Новый ЗаписьJSON;
 тПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет, " ", Истина); ЗаписьJSON.УстановитьСтроку(тПараметрыJSON); тДанные = Новый Структура; тДанные.Вставить("number", "001"); ЗаписатьJSON(ЗаписьJSON, тДанные); СтрокаJS = ЗаписьJSON.Закрыть(); Заголовки = Новый Соответствие; Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded;charset=utf-8"); Заголовки.Вставить("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36"); Заголовки.Вставить("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"); Заголовки.Вставить("Accept-Language", "ru"); Заголовки.Вставить("Accept-Charset", "utf-8"); Заголовки.Вставить("Content-Language", "ru"); Заголовки.Вставить("Content-Charset", "utf-8"); HTTPСоединение = Новый HTTPСоединение("192.168.220.224",80,,,,,); HTTPЗапрос = Новый HTTPЗапрос("/api"+"?name=lina&id=1", Заголовки); HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJS, КодировкаТекста.UTF16, ИспользованиеByteOrderMark.НеИспользовать); РезультатHTTP = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); Возврат РезультатHTTP.КодСостояния; | |||
| 10
    
        LopesLeonid 27.10.22✎ 14:46 | 
        так сделал, не работает
 json выглядит так {"number": "001"} | |||
| 11
    
        LopesLeonid 27.10.22✎ 14:47 | 
        возвращает 200 код, типа норм всё     | |||
| 12
    
        Kassern 27.10.22✎ 14:51 | 
        (0) (6) Почему в питоне 3 строчки, а на си нужно целую страницу написать?)
 Вот вам в условные "3 строчки": connect = Новый HTTPСоединение("192.168.220.224"); params = Новый соответствие(); params.Вставить("name","lina"); params.Вставить("id","1"); request=Новый HTTPЗапрос("/api",params ); request.УстановитьТелоИзСтроки("{"number": "001"}") Ответ= connect.ВызватьHTTPМетод("POST",request); Сообщить(Ответ.ПолучитьТелоКакСтроку()); //Те же 6 строк как и в питоне)) | |||
| 13
    
        vbus 27.10.22✎ 15:53 | 
        (6) По тому, что остальные портянки в import requests     | |||
| 14
    
        timurhv 27.10.22✎ 15:57 | 
        (0)
 ИнтеграцияИСМП.ОтправитьДанныеВСервис(URLЗапроса, ТелоЗапроса, Неопределено, "POST", ПараметрыHTTP); | |||
| 15
    
        Смотрящий от 1С 27.10.22✎ 16:03 | 
        КодировкаТекста.UTF16   там точно в тему?     | |||
| 16
    
        LopesLeonid 28.10.22✎ 09:56 | 
        Так решил
 ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет, " ", Истина)); тДанные = Новый Структура; тДанные.Вставить("number", "001"); ЗаписатьJSON(ЗаписьJSON, тДанные); СтрокаJS = ЗаписьJSON.Закрыть();// тут json файл создаём хСоединение = Новый HTTPСоединение("192.168.220.224" ,80,,,,,); хЗапрос = Новый HTTPЗапрос; хЗапрос.АдресРесурса = "/api/?name=lina&id=001"; //в адресе передаём параметры хЗапрос.Заголовки.Вставить("Content-Type", "application/json;charset=utf-8"); хЗапрос.УстановитьТелоИзСтроки(СтрокаJS);//тут json файл прикрепляем Ответ = хСоединение.ВызватьHTTPМетод("POST",хЗапрос); Сообщить(Ответ.ПолучитьТелоКакСтроку()); | |||
| 17
    
        LopesLeonid 28.10.22✎ 09:59 | 
        ну или не файл json, а строку)     | |||
| 18
    
        LopesLeonid 31.10.22✎ 13:57 | 
        Так запрос PUT делать, вдруг кому понадобится
 хСоединение = Новый HTTPСоединение(АдресСервера ,80,,,,,); хЗапрос = Новый HTTPЗапрос; хЗапрос.АдресРесурса = АдресРесурса;//адрес с параметрами хЗапрос.Заголовки.Вставить("Content-Type", "application/json;charset=utf-8"); хЗапрос.УстановитьТелоИзСтроки(СтрокаJS);//строка json Ответ = хСоединение.ВызватьHTTPМетод("PUT", хЗапрос); Возврат Ответ.ПолучитьТелоКакСтроку(); | |||
| 19
    
        LopesLeonid 31.10.22✎ 13:58 | 
        А так DELETE, не сильно отличается от предыдущего но всё же)
 хСоединение = Новый HTTPСоединение(АдресСервера ,80,,,,,); хЗапрос = Новый HTTPЗапрос; хЗапрос.АдресРесурса = АдресРесурса;//адрес с параметрами хЗапрос.Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded"); //хЗапрос.УстановитьТелоИзСтроки(СтрокаJS);//строка json Ответ = хСоединение.ВызватьHTTPМетод("DELETE", хЗапрос); Возврат Ответ.ПолучитьТелоКакСтроку(); | |||
| 20
    
        arsik гуру 31.10.22✎ 14:02 | 
        (6) (8) Можно даже в 1. Прикинь?
 Сообщить(POSTЗапросНаAPIсПараметрамиИJsonДанными(URL, data, params)); | |||
| 21
    
        LopesLeonid 31.10.22✎ 14:05 | 
        (20) 1С что-ли защищаешь? ))     | |||
| 22
    
        LopesLeonid 31.10.22✎ 14:37 | 
        А это для GET запроса
 хСоединение = Новый HTTPСоединение(АдресСервера ,80,,,,,); хЗапрос = Новый HTTPЗапрос; хЗапрос.АдресРесурса = АдресРесурса;// тут параметры "/?p1=123&p2=321" хЗапрос.Заголовки.Вставить("Content-Type", "text/html;charset=utf-8"); Ответ = хСоединение.ВызватьHTTPМетод("GET", хЗапрос); | |||
| 23
    
        Kassern 31.10.22✎ 15:14 | 
        (22) А всего лишь надо открыть СП и прочитать про ВызватьHTTPМетод() =)     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |