Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: HTTP-сервис ошибка 401
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
Bernet
Всем привет.

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

Так вот вопрос: когда я пишу
HTTPСоединение = Новый HTTPСоединение("АДРЕС", ПОРТ, "ПОЛЬЗОВАТЕЛЬ", "ПАРОЛЬ");

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

Не могу понять в чем проблема - под этим логином и паролем через браузер в базу заходит, помогите пожалуйста найти решение проблемы =)
ed.kharkov
Bernet @ Сегодня, 10:44 необходимо зарегистрироваться для просмотра ссылки ,
Добрый день.

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

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

ssl = Новый ЗащищенноеСоединениеOpenSSL;
HTTPСоединение = Новый HTTPСоединение("АДРЕС",ПОРТ,"ПОЛЬЗОВАТЕЛЬ","ПАРОЛЬ",,,ssl);
Bernet
ed.kharkov @ Сегодня, 11:24 необходимо зарегистрироваться для просмотра ссылки ,
ssl в конфиг файле Апача закомментирован,не думаю что в нем проблема
Vofka
Bernet, код бы полностью.
Bernet
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
Не знаю, как это могло работать.

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

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

Пользователь и пароль - это из 1С.
Bernet
Vofka @ Сегодня, 12:59 необходимо зарегистрироваться для просмотра ссылки ,
фак, но на домашнем же обмены шли именно при таком коде.... Вроде бы вернуло 200 типа все ок, попробую обменяться полностью
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.