Имя: Пароль:
1C
1С v8
Помогите конвертировать cUrl запрос в 1С
0 Mulber
 
04.02.23
13:46
Доброго времени суток, камрады.
Нужна помощь в конвертации cUrl запроса в 1С. Запрос рабочий.

curl -v -G -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" -H "Host: api.<кто-то-там>.com" -H "Content-Type: application/x-www-form-urlencoded" -u <юзер>:<пароль> "https://api.<кто-то-там>.com/v1/oauth2/authorize" -d "response_type=code" -d "client_id=<ид_клиента>" -d "redirect_uri=https://localhost/callback" -D "c:\out.txt"

Как делал я:
    client_id = "<ид_клиента>";
    user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36";
    
    Заголовки = Новый Соответствие;
    Заголовки.Вставить("User-Agent", user_agent);
    Заголовки.Вставить("Host", "api.<кто-то-там>.com");
    Заголовки.Вставить("Authorization", "Basic " + СтрокаВBase64("<юзер>:<пароль>"));
    Заголовки.Вставить("Accept", "*/*");
    Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");
    
    Соединение = Новый HTTPСоединение("api.<кто-то-там>.com", , , , , , Новый ЗащищенноеСоединениеOpenSSL());
    //Соединение = Новый HTTPСоединение("api.<кто-то-там>.com", 443, "<юзер>", "<пароль>", , , Новый ЗащищенноеСоединениеOpenSSL());
    Запрос = Новый HTTPЗапрос("/v1/oauth2/authorize", Заголовки);
    //СтрокаЗапроса = "response_type=code&client_id=" + Строка(client_id) + "&redirect_uri=https%3A%2F%2Flocalhost%2Fcallback";
    СтрокаЗапроса = "response_type=code&client_id=" + Строка(client_id) + "&redirect_uri=https://localhost/callback";
    Запрос.УстановитьТелоИзСтроки(СтрокаЗапроса);

    //Ответ = Соединение.ВызватьHTTPМетод("GET", Запрос);
    Ответ = Соединение.Получить(Запрос);

cUrl запрос возвращает респонз 302 с заголовком Location, в котором указан адрес для редиректа.
Мой же запрос возвращает тоже 302, но в заголовке информация о том, что запрос заблокирован, мол неверно составлен.
Помогите найти ошибку. Заранее всем спасибо!
1 hockeyist
 
04.02.23
13:50
(0) Попроси GPT преобразовать curl в Python.
2 mistеr
 
04.02.23
13:50
(0) Берешь Fiddler, смотришь итоговые запросы, сравниваешь.
3 hockeyist
 
04.02.23
13:55
(1) Можно сразу в 1С попросить, тоже работает
4 vde69
 
04.02.23
14:06
Гет запрос не содержит тело, наверно у тебя нужен не гет
5 Mulber
 
04.02.23
14:16
(4) мне заголовок Location ответа нужен
6 vde69
 
04.02.23
14:18
(5) установитьтелоизстроки не применимо для гет запросов.

Делай или пост или хонл
7 vde69
 
04.02.23
14:21
Ну либо текст запроса плюсуй к адресу, тогда будет гет

Короче почитай отличия гет пост и других запросов
8 Franchiser
 
гуру
04.02.23
15:21
(1) лучше сразу попросить в 1С конвертировать
9 Mulber
 
04.02.23
15:24
(8) вот что мне GPT выдал ):

&Запрос = Новый HttpЗапрос("api.<кто-то-там>.com/v1/oauth2/authorize");

&Запрос.УстановитьЗаголовок("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36");
&Запрос.УстановитьЗаголовок("host", "api.<кто-то-там>.com");
&Запрос.УстановитьЗаголовок("content-type", "application/x-www-form-urlencoded");
&Запрос.УстановитьАвторизацию("<юзер>", "<пароль>");

&Параметры = Новый АссоциативныйМассив;
ДобавитьВМассив(&Параметры, "response_type", "code");
ДобавитьВМассив(&Параметры, "client_id", "<ид_клиента>");
ДобавитьВМассив(&Параметры, "redirect_uri", "https://localhost/callback");

&Запрос.УстановитьТелоЗапроса(ЗакодироватьЗапросФормы(&Параметры));

&Результат = &Запрос.Выполнить();
10 Mulber
 
04.02.23
15:33
адаптирую под 1с, отпишусь, спасибо всем за идеи и предложения
11 breezee
 
04.02.23
19:46
(9) Новый АссоциативныйМассив мощно
12 hockeyist
 
04.02.23
21:25
(11) Бывает. Если вопросы неправильно задавать.
Мне выдало:

Процедура ОтправитьЗапрос()
    Перем Запрос := Новый HTTPЗапрос();
    Запрос.УстановитьURL("https://api.<кто-то-там>.com/v1/oauth2/authorize");
    Запрос.УстановитьМетод("POST");
    
    Перем Заголовки := Новый Структура();
    Заголовки.Вставить("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36");
    Заголовки.Вставить("Host", "api.<кто-то-там>.com");
    Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");
    Запрос.УстановитьЗаголовки(Заголовки);
    
    Перем Данные := Новый Структура();
    Данные.Вставить("response_type", "code");
    Данные.Вставить("client_id", "<ид_клиента>");
    Данные.Вставить("redirect_uri", "https://localhost/callback");
    Запрос.УстановитьТело(Данные.Представление());
    
    Перем Ответ := Запрос.Отправить();
    
    ФайлТекста.Записать("c:\out.txt", Ответ.Тело(), Неопределено, КодировкаТекста.UTF8);
КонецПроцедуры
13 hockeyist
 
04.02.23
21:29
Что лишний раз доказывает, что генерится все-таки код на Python. А потом отрабатывает кривой переводчик на 1С.
Но в контексте вопроса ТС, ответ дан верный. А именно: используй POST. Остальное детали
14 vde69
 
04.02.23
21:35
(13) верный ответ был дан в (4)
15 hockeyist
 
04.02.23
22:08
(14) Да, ты не хуже GPT )))
16 Mulber
 
04.02.23
22:26
(12) только учусь задавать вопросы нейросети. хотя и сам еще в 2003 выступал с речью о нейросетях в одном из ВУЗов. много воды утекло, технологии просто удивляют нынче ) еще раз всем спасибо!
17 Mulber
 
07.02.23
20:51
еще вопрос а кто-нибудь работал с кукисами chrome из 1С. файловая база SQLite, может статейку посоветуете?
18 vde69
 
07.02.23
21:00
(17)  Заголовки.Вставить("кукипоанглийски", соответствие);
19 Mulber
 
07.02.23
21:07
(18) это я знаю, а как мне прочитать куки из файла в формате хромовских куки (SQLite)?
20 Mulber
 
07.02.23
21:08
%AppData%\Local\Google\Chrome\User Data\Default\Network\Cookies
21 vde69
 
07.02.23
21:28
ответ.заголовки["setcoocie"]
22 Mulber
 
07.02.23
21:32
(21) не то. в браузере мы логинимся, куки сохраняются в файле. в 1С нам необходимо получить эти куки браузера (из вышеуказанного файла) и передать в запросе, минуя этап ручного логина.
23 Mulber
 
07.02.23
21:36
этот api подразумевает только логиниться через браузер, приходится хитрить и пытаться "скормить" куки браузера
24 Mulber
 
07.02.23
21:38
извиняюсь, очередность слов перепутал: логиниться только через браузер
25 Garykom
 
гуру
07.02.23
21:50
в 1С встроен браузер webkit
кто тебе мешает логиниться через него?
26 Mulber
 
07.02.23
21:54
(25) хотелось бы минимум действий от пользователя, а использовать существующее подключение в браузере.
27 vde69
 
08.02.23
12:38
(22) куки уже сохраненные на диске по идее должны шифроваться от подобных попыток их прочитать. Хотя точно я не знаю...
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой