Имя: Пароль:
1C
 
1C HTTP запрос base auth
0 tabarigen
 
26.11.18
10:58
Ребята подскажите пожалуйста, base auth запросы как слать в 1с?
&НаКлиенте
Процедура ОтправитьЗапросНаСайт(Команда)
    Заголовки = Новый Соответствие();
    // Передаем в заголовках размер и тип данных на отправку
    Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
    //Заголовки.Вставить("consumer_key", "ck_2c9d1434e7783f46a6a789f756cde9a5517dbda5");
    //Заголовки.Вставить("consumer_secret", "cs_2b815b2a5ff075ac3698fa6dc5f90613d662f1bb");
    Заголовки.Вставить("Authorization: Basic", "ck_2c9d1434e7783f46a6a789f756cde9a5517dbda5:cs_2b815b2a5ff075ac3698fa6dc5f90613d662f1bb");
    Соединение =  Новый HTTPСоединение("localhost/apteka149",80);
    
    Запрос = Новый HTTPЗапрос("/wp-json/wc/v3/products/", Заголовки);
    Запрос.УстановитьТелоИзСтроки(JSONСтрока);
    
    Ответ = Соединение.ОтправитьДляОбработки(Запрос);
    
    //ЧтениеJSON = Новый ЧтениеJSON;
    //ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
    
    //ОтветСервера = ПрочитатьJSON(ЧтениеJSON);
    ОтветСервера = Ответ.ПолучитьТелоКакСтроку();
КонецПроцедуры

Пробую так не получается.
1 reloc
 
26.11.18
11:15
Новый HTTPСоединение(<Сервер>, <Порт>, <Пользователь>, <Пароль>, <Прокси>, <Таймаут>, <ЗащищенноеСоединение>, <ИспользоватьАутентификациюОС>)

Указать
<Пользователь>
<Пароль>
2 tabarigen
 
26.11.18
11:19
Да пробовал так тоже
3 tabarigen
 
26.11.18
11:22
Ответ сервера
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">;
<html xmlns="http://www.w3.org/1999/xhtml"; lang="en" xml:lang="en">
<head>
<title>Access forbidden!</title>
<link rev="made" href="mailto:postmmailto:postmaster@localhost";style type="text/css"><!--/*--><![CDATA[/*><!--*/
    body { color: #000000; background-color: #FFFFFF; }
    a:link { color: #0000CC; }
    p, address {margin-left: 3em;}
    span {font-size: smaller;}
/*]]>*/--></style>
</head>

<body>
<h1>Access forbidden!</h1>
<p>


  

    You don't have permission to access the requested directory.
    There is either no index document or the directory is read-protected.

  

</p>
<p>
If you think this is a server error, please contact
the <a href="mailto:postmmailto:postmaster@localhost">webmaster</a>>

<h2>Error 403</h2>
<address>
  <a href="/">localhost</a><br />
  <span>Apache/2.4.37 (Win32) OpenSSL/1.1.1 PHP/7.2.12</span>
</address>
</body>
</html>
4 Cyberhawk
 
26.11.18
11:22
Прежде чем из 1С что-то делать добейся чтоб оно из какого-нибудь другого приложения-проверяльщика заработало
5 sandal_r
 
26.11.18
11:24
кодируй пару login:password в base64

для пары "user:password" значение будет "dXNlcjpwYXNzd29yZA=="
6 sandal_r
 
26.11.18
11:27
+ (5)
заголовок будет выглядеть так:
Заголовки.Вставить("Authorization", "Basic dXNlcjpwYXNzd29yZA==");
7 tabarigen
 
27.11.18
09:17
(4) https://yadi.sk/i/mGn4TVm3rrjkGg
из если напрямую через rest клиент то все рабоает
(6) спасибо за вашу подсказку.
я тоже заметил, что rest клиент преобразует ключ и пароль в какой то хеш и подставляет его в заголовок запроса Authorization

получается мне нужно добиться преобразования моей пары в base64?
8 Cyberhawk
 
27.11.18
11:49
(7) "напрямую через rest клиент то все рабоает" // Какие проблемы повторить в 1С?
9 sandal_r
 
28.11.18
10:36
(7)
ничего добиваться не надо.
надо преобразовать пару логин:пароль в base64 и подставить в заголовок
10 tabarigen
 
06.12.18
14:39
(9) Спасибо всем за помощь.
След код работает
&НаКлиенте
Процедура ОтправитьЗапросНаСайт(Команда)
        
    
    Заголовки = Новый Соответствие();
    Заголовки.Вставить("Content-Type", "application/json; charset=UTF-8");
    Заголовки.Вставить("Authorization", "Basic " + СоздатьСтрокуBase64("ck_c02d8c902d05e6810a7548eaa07878787878:cs_9cb60c098aa323d3b0130dd7201977777777"));
    Заголовки.Вставить("Host", "78787887.ru");
    Заголовки.Вставить("Accept", "*/*");
    Заголовки.Вставить("Connection", "keep-alive");
    
    Попытка
        ssl = Новый ЗащищенноеСоединениеOpenSSL(
            Новый СертификатКлиентаWindows(),
            Новый СертификатыУдостоверяющихЦентровWindows());

        Соединение =  Новый HTTPСоединение("8787878.ru",443,,,,5, Новый ЗащищенноеСоединениеOpenSSL);
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
    
    Запрос = Новый HTTPЗапрос("/wp-json/wc/v3/products/", Заголовки);
    
    Запрос.УстановитьТелоИзСтроки(JSONСтрока, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
    
    Ответ = Соединение.ОтправитьДляОбработки(Запрос);
    
    тЧтение = Новый ЧтениеJSON;
    тЧтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
    
    Дн = ПрочитатьJSON(тЧтение,Ложь,,,,,);
    
    
    ОтветСервера = "code: " + Дн.code + Символы.ПС + "status: " + Дн.data.status + Символы.ПС + "message: " + Дн.message;
    ТекущийЭлемент = Элементы.ОтветСервера;
КонецПроцедуры



Правда есть проблема с преобразоваем пары  ключей в base64. код из 1С у меня не сработал. Если использовать сторонние утилиты преобразования, и подставить свормированную base64 строку авторизация успешно проходит.
11 tabarigen
 
06.12.18
14:41
Вот как я в 1с строку перегоняю в base64.

Функция СоздатьСтрокуBase64(Строка) Экспорт

     ВременныйФайл = ПолучитьИмяВременногоФайла();
    
     ЗаписьТекста = Новый ЗаписьТекста(ВременныйФайл, КодировкаТекста.ANSI);
     ЗаписьТекста.Записать(Строка);
     ЗаписьТекста.Закрыть();
    
     ДД_Файла = Новый ДвоичныеДанные(ВременныйФайл);
     СтрокаBase64 = Base64Строка(ДД_Файла);
    
     УдалитьФайлы(ВременныйФайл);

КонецФункции



Почему результирующая строка содержит какой то  непонятный символ. ¶.
Пробовал от него избавиться СтрЗаменить(СтрокаBase64, "¶", "");, ничего не получилось.
12 Lexey_
 
06.12.18
14:53
(11) СтрокаBase64 = ПолучитьBase64СтрокуИзДвоичныхДанных(ПолучитьДвоичныеДанныеИзСтроки("Строка"))
13 tabarigen
 
06.12.18
15:02
(12) тогда я получу
59 32 74 66 59 7A 41 79 5A 44 68 6A 4F 54 41 79 5A 44 41 31 5A 54 59 34 4D 54 42 68 4E 7A 55 30 4F 47 56 68 59 54 41 33 59 6A 52 6A 59 6D 4D 35 5A 6A 51 30 4F 57 59 7A 4D 44 70 6A 63 31 38 35 0D 0A 59 32 49 32 4D 47 4D 77 4F 54 68 68 59 54 4D 79 4D 32 51 7A 59 6A 41 78 4D 7A 42 6B 5A 44 63 79 4D 44 45 35 59 57 49 31 4F 44 5A 6B 4E 6D 59 30 59 6A 55 33
14 Lexey_
 
06.12.18
15:04
(13) нет, а ты проверь
15 tabarigen
 
06.12.18
15:05
(14) проверил Дарагой
16 Lexey_
 
06.12.18
15:07
(15) плохо проверил, скинь скрин отладчика
17 tabarigen
 
06.12.18
15:16
18 Lexey_
 
06.12.18
15:20
(17) а теперь сравни с кодом в (12)
19 tabarigen
 
06.12.18
15:23
(18) Да все верно. была ошибка. Только этот проклятый символ все равно выходит(
20 tabarigen
 
06.12.18
15:23
21 tabarigen
 
06.12.18
15:28
обоими методами одно и тоже. если эту строку декодировать через сайт https://www.base64encode.net/ то все ок.
22 Lexey_
 
06.12.18
15:29
(20) ппц...ты даже готовое решение применить не можешь, на твоем скрине ты вообще никак не используешь код из (12), а получаешь base64 по-своему
23 Salimbek
 
06.12.18
15:30
(19) Этот символ либо Перевод строки, либо начальный байт для UTF-8. Точнее - можешь скать ты сам, если переберешь всю строку свою посимвольно и для каждой сделаешь

Сообщить(КодСимвола(ТвояСтрока, Счетчик));
24 Lexey_
 
06.12.18
15:32
(21) вычисли в отладчике вот это ПолучитьBase64СтрокуИзДвоичныхДанных(ПолучитьДвоичныеДанныеИзСтроки("Строка"))
со своей строкой вместо "Строка"
25 tabarigen
 
06.12.18
15:33
(24) да блин.
так я это и делаю же.
в (20) на скрине это видно.
26 Lexey_
 
06.12.18
15:36
(25) жесть какая...в (20) в отладчике СтрокаBase64, а не то, что я прошу в (24)
27 tabarigen
 
06.12.18
15:38
(26) да в курсе я. твой код я отладчиком вычислил, тоже самое. Если хочешь вот тебе еще скрин.
https://yadi.sk/i/zJ_P1aH9DrrTEA
28 tabarigen
 
06.12.18
15:40
Мне кажется тут какой  то глюк платформы что ли, юзаю кстати. 8.3.11.3034
29 Salimbek
 
06.12.18
15:44
(28) Попробуй выполнить это:
Для Сч = 1 По СтрДлина(ТвояСтрока) Цикл
_см= Сред(ТвояСтрока, Сч, 1);
Сообщить("Символ: "+_см+" Код символа: "+КодСимвола(ТвояСтрока, Сч));
КонецЦикла;
30 Lexey_
 
06.12.18
15:46
(27) а теперь нажми F2 в отладчике(вычислить в отдельном окне)
31 Lexey_
 
06.12.18
15:46
+(30) это перенос строки
32 tabarigen
 
06.12.18
15:47
33 Salimbek
 
06.12.18
15:48
(32) :-) И что тебе это говорит?
34 tabarigen
 
06.12.18
15:48
(33) Перевод строки?)
35 Salimbek
 
06.12.18
15:49
(34) Ну у тебя он есть.
А что: Твоя строка - это цифра 5, потом перевод строки, и потом Y ?
36 tabarigen
 
06.12.18
15:50
(35) нет моя строка длинная. на скрине я сразу перешел к странным символам.
37 Salimbek
 
06.12.18
15:52
(36) Ну значит смотри - откуда они у тебя взялись.
И да, 13 и 10 - это стандартные символы Перевода строки и Возврата каретки
38 tabarigen
 
06.12.18
15:53
(37) Они взялись после выполнения кода
Строка = "ck_c02d8c902d05e6810a7548eaa07b4cbc9f449f30:cs_9cb60c098aa323d3b0130dd72019ab586d6f4b57";
СтрокаBase64 = ПолучитьBase64СтрокуИзДвоичныхДанных(ПолучитьДвоичныеДанныеИзСтроки(Строка));
39 Lexey_
 
06.12.18
15:56
(38) а почему ты решил, что их там быть не должно?
40 dezss
 
06.12.18
15:56
Я что-то не пойму, как такое может быть? Ведь после преобразования в Base64 не должно быть символов 10 и 13
41 Salimbek
 
06.12.18
15:56
(38) Т.е.
Строка = "ck_c02d8c902d05e6810a7548eaa07b4cbc9f449f30:cs_9cb60c098aa323d3b0130dd72019ab586d6f4b57";
Для Сч = 1 По СтрДлина(Строка) Цикл
_см= Сред(Строка, Сч, 1);
Сообщить("Символ: "+_см+" Код символа: "+КодСимвола(Строка, Сч));
КонецЦикла;

У тебя выдаст Символы 13 и 10 ?
42 tabarigen
 
06.12.18
15:56
(39) потому что я передаю строку без всяких символов.
43 tabarigen
 
06.12.18
15:57
(41) вот так.
Строка = "ck_c02d8c902d05e6810a7548eaa07b4cbc9f449f30:cs_9cb60c098aa323d3b0130dd72019ab586d6f4b57";
СтрокаBase64 = ПолучитьBase64СтрокуИзДвоичныхДанных(ПолучитьДвоичныеДанныеИзСтроки(Строка));
Для Сч = 1 По СтрДлина(СтрокаBase64 ) Цикл
_см= Сред(СтрокаBase64 , Сч, 1);
Сообщить("Символ: "+_см+" Код символа: "+КодСимвола(СтрокаBase64 , Сч));
КонецЦикла;
44 dezss
 
06.12.18
15:58
(39) а откуда они там могут взяться?
45 tabarigen
 
06.12.18
15:59
Короч вот финальный вариант. КОторый работает.  Пришлось зачищать полученную строку
&НаКлиенте
Процедура ОтправитьЗапросНаСайт(Команда)
        
    
    Заголовки = Новый Соответствие();
    Заголовки.Вставить("Content-Type", "application/json; charset=UTF-8");
    Заголовки.Вставить("Authorization", "Basic " + СоздатьСтрокуBase64("ck_c02d8c902d05e6810a7548eaa07b4cbc9f449f30:cs_9cb60c098aa323d3b0130dd72019ab586d6f4b57"));
    //Заголовки.Вставить("Authorization", "Basic Y2tfYzAyZDhjOTAyZDA1ZTY4MTBhNzU0OGVhYTA3YjRjYmM5ZjQ0OWYzMDpjc185Y2I2MGMwOThhYTMyM2QzYjAxMzBkZDcyMDE5YWI1ODZkNmY0YjU3");
    Заголовки.Вставить("Host", "kyxnimsk.ru");
    Заголовки.Вставить("Accept", "*/*");
    Заголовки.Вставить("Connection", "keep-alive");
    
    Попытка
        ssl = Новый ЗащищенноеСоединениеOpenSSL(
            Новый СертификатКлиентаWindows(),
            Новый СертификатыУдостоверяющихЦентровWindows());

        Соединение =  Новый HTTPСоединение("kyxnimsk.ru",443,,,,5, Новый ЗащищенноеСоединениеOpenSSL);
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
    
    Запрос = Новый HTTPЗапрос("/wp-json/wc/v3/products/", Заголовки);
    
    Запрос.УстановитьТелоИзСтроки(JSONСтрока, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
    
    Ответ = Соединение.ОтправитьДляОбработки(Запрос);
    
    тЧтение = Новый ЧтениеJSON;
    тЧтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
    
    Дн = ПрочитатьJSON(тЧтение,Ложь,,,,,);
    
    
    ОтветСервера = "code: " + Дн.code + Символы.ПС + "status: " + Дн.data.status + Символы.ПС + "message: " + Дн.message;
    ТекущийЭлемент = Элементы.ОтветСервера;
КонецПроцедуры


Функция СоздатьСтрокуBase64(Строка) Экспорт

     СтрокаBase64 =  ПолучитьBase64СтрокуИзДвоичныхДанных(ПолучитьДвоичныеДанныеИзСтроки(Строка));
     СтрокаBase64 = СтрЗаменить(СтрокаBase64, Символы.ПС, "");
     СтрокаBase64 = СтрЗаменить(СтрокаBase64, Символы.ВК, "");
         
     Возврат СтрокаBase64;

КонецФункции
46 tabarigen
 
06.12.18
16:01
Спасибо Salimbek и  Lexey_, помогли
47 dezss
 
06.12.18
16:03
А как же обсудить это дело?
Это, по сути, глюк в функционале.
Каким образом может появится перенос строки в данные, преобразованных в base64? О_о
48 tabarigen
 
06.12.18
16:06
(47) Да я сам хз, столько времени убил на это.
49 tabarigen
 
06.12.18
16:06
пока ребята не помогли
50 Salimbek
 
06.12.18
16:18
(45)(47) Действительно, у себя потестил - после 48-го символа вставляется перевод строки.
Т.е. для "ck_c02d8c902d05e6810a7548eaa07b4cbc9f449f30:cs_9" - в ответе одна строка, а для "ck_c02d8c902d05e6810a7548eaa07b4cbc9f449f30:cs_9c" - уже есть перевод строки.
А если более 96 символов, то второй перевод строки появляется.
З.Ы. 1С 8.3.11.2867
51 tabarigen
 
06.12.18
16:28
(50) ну наверное ссылка на эту тему поможет кому то в будущем пока ошибку не исправят)
52 Cyberhawk
 
06.12.18
21:16
Может вместо "ПолучитьBase64СтрокуИзДвоичныхДанных" заюзать аналогичные метод "Base64Строка"?
53 tabarigen
 
07.12.18
09:48
(52) в (11) так и сделано, результат такой же
AdBlock убивает бесплатный контент. 1Сергей