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