Версия для печати темы (https://pro1c.org.ua/index.php?showtopic=46994)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ HTTP-сервис ошибка 401

Автор: Bernet 02.08.18, 9:44

Всем привет.

Имеется конфигурация на 8.3.10 и Apache 2.2
В конфигурации есть HTTP-сервис, база опубликована, при входе через браузер все ок.
Имеется другая база которая обращается через HTTP сервис к первой, на моем домашнем компе все работает, данные летают.
На серваке клиента же, при обращении к HTTP-сервису возвращается результат с кодом состояния - 401 Не Авторизирован.

Так вот вопрос: когда я пишу

HTTPСоединение = Новый HTTPСоединение("АДРЕС", ПОРТ, "ПОЛЬЗОВАТЕЛЬ", "ПАРОЛЬ");

Пользователь и Пароль - это пользователь и пароль от 1С к которой я подключаюсь или это авторизация самого веб-сервера (Апача) ?

Не могу понять в чем проблема - под этим логином и паролем через браузер в базу заходит, помогите пожалуйста найти решение проблемы =)

Автор: ed.kharkov 02.08.18, 10:08

Bernet @ Сегодня, 10:44 * ,
Добрый день.

HTTPСоединение = Новый HTTPСоединение("АДРЕС", ПОРТ, "ПОЛЬЗОВАТЕЛЬ", "ПАРОЛЬ");

ПОЛЬЗОВАТЕЛЬ и ПАРОЛЬ - это пользователь и пароль на указанном сервере <АДРЕС>.

Автор: Bernet 02.08.18, 10:13

ed.kharkov @ Сегодня, 11:08 * ,
все равно не дошло, если Адрес = "localhost/UPP/hs/ИМЯМОЕГОСЕРВИСА" то Пользователь - это Пользователь Апача или 1С?
Не понятно в синтаксис-помощнике написали. Тут идет обращение к веб-серверу, но при этом дальше перекидывает на опубликованный сервис, в итоге чья авторизация падает?

Автор: ed.kharkov 02.08.18, 10:24

Bernet @ Сегодня, 11:13 * ,
Как вариант можно еще попробовать использовать защищенное соединение, у меня было пару случаев, когда это помогло.

ssl = Новый ЗащищенноеСоединениеOpenSSL;
HTTPСоединение = Новый HTTPСоединение("АДРЕС",ПОРТ,"ПОЛЬЗОВАТЕЛЬ","ПАРОЛЬ",,,ssl);

Автор: Bernet 02.08.18, 10:44

ed.kharkov @ Сегодня, 11:24 * ,
ssl в конфиг файле Апача закомментирован,не думаю что в нем проблема

Автор: Vofka 02.08.18, 10:45

Bernet, код бы полностью.

Автор: Bernet 02.08.18, 11:02

Vofka @ Сегодня, 11:45 * ,

&НаСервере
Процедура АвторизоватьсяНаСервере()
    
    ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(, Символы.Таб);
    
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.ПроверятьСтруктуру = Ложь;
    
    ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON);
    
    ЗаписьJSON.ЗаписатьНачалоОбъекта();
    
    ЗаписьJSON.ЗаписатьИмяСвойства("user");
    ЗаписьJSON.ЗаписатьЗначение("НЕКИЙ_ПОЛЬЗОВАТЕЛЬ_ВСПРАВОЧНИКЕ");
    
    ЗаписьJSON.ЗаписатьИмяСвойства("pass");
    ЗаписьJSON.ЗаписатьЗначение("НЕКИЙ_ПАРОЛЬ_ВСПРАВОЧНИКЕ");        
        
    ЗаписьJSON.ЗаписатьКонецОбъекта();
    
    //ЗаписьJSON.Закрыть();
    СтрокаJSON = ЗаписьJSON.Закрыть();
    
    // ОТПРАВЛЯЕМ ЗАПРОС И ПОЛУЧАЕМ ОТВЕТ
    Результат = ОтправитьСообщениеJSON(СтрокаJSON, "/ИМЯМОЕГОСЕРВИСА", "POST", Истина);        
    Сообщить(Результат.КодСостояния);
    
КонецПроцедуры

&НаСервере
Функция ОтправитьСообщениеJSON(СтрокаJSON, АдресРесурса, Метод, ТребуетсяАвторизация = Истина) Экспорт
    
    HTTPСоединение = Новый HTTPСоединение("localhost/UPP/hs", МОЙПОРТАПАЧА, "ПОЛЬЗОВАТЕЛЬ_ИБ", "ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ_ИБ");     
    
    HTTPЗапрос       = Новый HTTPЗапрос(АдресРесурса);
    HTTPЗапрос.Заголовки.Вставить("Content-type", "application/json");
    HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON, "UTF-8", ИспользованиеByteOrderMark.НеИспользовать);
    
    Попытка
        Если Метод = "POST" Тогда
            Результат = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); // POST        
        ИначеЕсли Метод = "GET" Тогда     
            Результат = HTTPСоединение.Получить(HTTPЗапрос); // GET
        КонецЕсли;
    Исключение
        Сообщить(ОписаниеОшибки());        
    КонецПопытки;
    
    Возврат Результат;    
    
КонецФункции


Если отсечь константы и все такое, то получается на выходе такая шняга. На домашнем компе такое работает, на рабочем серваке 401 - Не авторизирован, не понимаю чью авторизацию не проходит запрос.
В конфиге апача все что менялось - это порт на котором он висит, все остальное грубо говоря по дефолту.

Автор: Vofka 02.08.18, 11:59

Не знаю, как это могло работать.

HTTPСоединение = Новый HTTPСоединение("localhost/UPP/hs", МОЙПОРТАПАЧА, "ПОЛЬЗОВАТЕЛЬ_ИБ", "ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ_ИБ");

Первый параметр должен быть вида site.com. В случае с локалхост это, наверное, должно быть либо localhost либо 127.0.0.1. А АдресРесурса должен быть в виде UPP/hs/ИМЯМОЕГОСЕРВИСА/УРЛ_ИЗ_ШАБЛОНА (возможно со слешем вначале).

Пользователь и пароль - это из 1С.

Автор: Bernet 02.08.18, 13:10

Vofka @ Сегодня, 12:59 * ,
фак, но на домашнем же обмены шли именно при таком коде.... Вроде бы вернуло 200 типа все ок, попробую обменяться полностью

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua