Имя: Пароль:
1C
 
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
(0)

Коннектор - это "Requests" для мира 1С. (c)

https://github.com/vbondarevsky/Connector
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Метод() =)
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.