Имя: Пароль:
1C
1С v8
Http запрос мобильное приложение
0 rkorsak
 
16.07.20
10:56
День добрый.
Есть мобильное приложение на платформе 8.3.16. Отправляет get запрос через apache 2.2 в ут 10.3 внутри локальной сети.
Обнаружилась следующая проблема:
Мобильное приложение отправляет первый запрос без авторизации, приходит отает 401. Сразу же следующий отправляет с авторизацией, приходит ответ 200

GET /trade/hs/obmen/Product/getProduct HTTP/1.1
User-Agent: 1C+Enterprise/8.3
Host: 192.168.1.22:1891
Connection: Keep-Alive
Accept-Encoding: gzip

HTTP/1.1 401 Unauthorized
Date: Wed, 15 Jul 2020 05:46:39 GMT
Server: Apache/2.2.6 (Win32)
WWW-Authenticate: Basic realm="1C:Enterprise 8.3"
Content-Length: 0
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/plain

GET /trade/hs/obmen/Product/getProduct HTTP/1.1
User-Agent: 1C+Enterprise/8.3
Authorization: Basic 0JDQtNC80LjQvdC40YHRgtCw0YDRgtC+0YA6NjY0NjkxNQ==
Host: 192.168.1.22:1891
Connection: Keep-Alive
Accept-Encoding: gzip

HTTP/1.1 200 OK
Date: Wed, 15 Jul 2020 05:46:39 GMT
Server: Apache/2.2.6 (Win32)
Content-Length: 260825
Keep-Alive: timeout=5, max=99
Connection: Keep-Alive
Content-Type: text/x-json

Текст кода
ЗапросХТТП = Новый HTTPЗапрос(Настройки.Публикация + "/hs/obmen/Product/getProduct");
Соединение = Новый HTTPСоединение(Настройки.Адрес, Настройки.Порт, Настройки.Логин, Настройки.Пароль);
Ответ = Соединение.Получить(ЗапросХТТП);


Может кто сталкивался?
1 Garykom
 
гуру
16.07.20
11:06
Закомментируй указанный код с авторизацией и запусти свое приложение - 99% что там еще есть код который и делает первый запрос
2 Garykom
 
гуру
16.07.20
11:09
Ну или вариант не используй встроенную в 1С возможность авторизации Basic
Т.е. логин и пароль не указываешь а просто свой заголовок вставляешь
"Authorization" с нужной строкой "Basic 0JDQtNC80LjQvdC40YHRgtCw0YDRgtC+0YA6NjY0NjkxNQ=="
Это "Basic "+base64(логин+":"+пароль)
3 rkorsak
 
17.07.20
11:54
(1) точно нет. По отладке иду и смотрю через сниффер запросы. При  Соединение.Получить(ЗапросХТТП) отправляет запрос без авторизации приходит 401 и сразу с авторизацией
4 rkorsak
 
17.07.20
11:56
(2) Помогло. Спасибо.
        Поток  = Новый ПотокВПамяти;
    ЗаписьТекста = Новый ЗаписьТекста(Поток) ;
    ЗаписьТекста.Записать(Логин+":"+Пароль);
    ЗаписьТекста.Закрыть();
    ДвоичныеДанные = Поток.ЗакрытьИПолучитьДвоичныеДанные();
    Строка64 = Base64Строка(ДвоичныеДанные);
    
    СтрокаАвторизации = "Basic "+Строка64;
5 Garykom
 
гуру
17.07.20
11:58
(4) Можно без файловых операций и не учел кодировку, что важно если логин или пароль кириллица