|
Проблема с подключением к http сервису на 1С из python | ☑ | ||
---|---|---|---|---|
0
yurii-syrkin
22.04.20
✎
17:50
|
Здравствуйте. Необходимо связать базу 1С и сайт на python. В 1С создал http сервис. Он работает, в браузере могу зайти по адресу, появляется информация в json формате, всё норм. Но вот из python ни как не могу подключиться к этому сервису, выдаётся ошибка 401. http сервис развернул на веб сервере IIS 10. Вот код:
from urllib import request from requests.auth import HTTPBasicAuth import requests myUrl = 'http://localhost/Uchet_Chasov/hs/DataExchange' res = requests.get(myUrl, headers= {'Authorization': ‘Basic’}, auth=HTTPBasicAuth('логин', ‘пароль’)) Какие бы логин с паролем я не передавал (и от ОС windows, и пользователь 1С) всё равно в res ошибка 401. Уже два дня бьюсь, ни чего не помогает. Если кто сталкивался, подскажите как быть. Спасибо. |
|||
1
quest
22.04.20
✎
18:05
|
могу ошибится, но по моему у питонанадо явно указыать юникод в строках
auth=HTTPBasicAuth(u'логин', u‘пароль’) но могу ошибаться |
|||
2
такт
22.04.20
✎
18:14
|
а если авторизацию в vrd - подключается ?
|
|||
3
yurii-syrkin
22.04.20
✎
18:15
|
(1) Нет, не помогло
|
|||
4
yurii-syrkin
22.04.20
✎
18:16
|
(2) А это как? Не совсем понял. Я честно говоря так и не понял, чьи учетные данные необходимо указывать пользователя 1С или виндовые?
|
|||
5
такт
22.04.20
✎
18:20
|
(4) в файле vrd в строке сервера и базы добавляешь ;;Usr=хххх;Password=хххх;
|
|||
6
такт
22.04.20
✎
18:24
|
+5 Password на Pwd
|
|||
7
yurii-syrkin
22.04.20
✎
18:26
|
Вот так да? ib="Srvr="Tyson";Ref="Uchet_Chasov";Usr=sa;Password=12345;"
|
|||
8
yurii-syrkin
22.04.20
✎
18:27
|
Всё равно не получается. 401 хоть убейся
|
|||
9
такт
22.04.20
✎
18:27
|
(7) Password на Pwd
http://1centerprise8.blogspot.com/2015/06/avtorizacija-vebservisa.html |
|||
10
такт
22.04.20
✎
18:39
|
(9) если не поможет можно посмотреть CORS policy
|
|||
11
yurii-syrkin
22.04.20
✎
18:47
|
Вот я как раз вникаю и пробую. А CORS policy что такое?
|
|||
12
bolero
22.04.20
✎
18:48
|
(0) > headers= {'Authorization': ‘Basic’}
а кто тебе сказал так делать, дополнительно еще заголовок кидать? возможно, IIS ругается на то, что ты два раза его шлешь у меня так УМВР:
(10) (11) не, CORS тут не виноват |
|||
13
yurii-syrkin
22.04.20
✎
18:55
|
(12) Да я и с заголовками пробовал и без и с картежем и через auth=HTTPBasicAuth(. Сейчас попробовал как вы посоветовали через s = requests.Session(), всё равно не помогает
|
|||
14
Serginio1
22.04.20
✎
19:17
|
У тебя логин или пaроль на кириллице? там надо приводить к Utf8
https://ru.stackoverflow.com/questions/554879/Авторизация-soap-клиента-на-c-по-протоколу-https/555305#555305 |
|||
15
Garykom
гуру
22.04.20
✎
20:22
|
myUrl = 'http://localhost/Uchet_Chasov/hs/DataExchange'
res = requests.get(myUrl, auth=('username', 'password') |
|||
16
yurii-syrkin
22.04.20
✎
20:54
|
(14) Нет, на английском языке всё и логин и пароль
|
|||
17
Вафель
22.04.20
✎
20:56
|
Cors это вообще только для браузера инструкция
|
|||
18
yurii-syrkin
22.04.20
✎
21:01
|
В заголовке ответа вот такая хрень приходит {'Cache-Control': 'private', 'Content-Type': 'text/html; charset=utf-8', 'Server': 'Microsoft-IIS/10.0', 'WWW-Authenticate': 'Basic realm="1C:Enterprise 8.3", Negotiate, NTLM, Basic realm="localhost"', 'Date': 'Wed, 22 Apr 2020 17:58:35 GMT', 'Content-Length': '6294'}
|
|||
19
yurii-syrkin
22.04.20
✎
21:01
|
То есть получается python всё таки достукивается до сервиса?
|
|||
20
yurii-syrkin
22.04.20
✎
21:06
|
Вот такой вот ответ невнятный:
strict_ns_set_initial_dollar:False strict_ns_set_path:False strict_ns_unverifiable:False strict_rfc2965_unverifiable:True _allowed_domains:None _blocked_domains:() _now:1587578615 status_code:401 text:'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> \n<html xmlns="http://www.w3.org/1999/xhtml"> \n<head> \n<title>Подробные данные об ошибке IIS 10.0 — 401.5 — Unauthorized</title> \n<style type="text/css"> \n<!-- \nbody{margin:0;font-size:.7em;font-family:Verdana,Arial,Helvetica,sans-serif;} \ncode{margin:0;color:#006600;font-size:1.1em;font-weight:bold;} \n.config_source code{font-size:.8em;color:#000000;} \npre{margin:0;font-size:1.4em;word-wrap:break-word;} \nul,ol{margin:10px 0 10px 5px;} \nul.first,ol.first{margin-top:5px;} \nfieldset{padding:0 15px 10px 15px;word-break:break-all;} \n.summary-container fieldset{padding-bottom:5px;margin-top:4px;} \nlegend.no-expand-all{padding:2px 15px 4px 10px;margin:0 0 0 -12px;} \nlegend{color:#333333;;margin:4px 0 8px -12px;_margin-top:0px; \nfont-weight:bold;font-size:1em;} \na:link,a:visited{color:#007EFF;font-weight:bold;} \na:hover{text-decoration:none;} \nh1{font-size:2.4em;margin:0;color:#FFF;} \nh2{... url:'http://localhost/Uchet_Chasov/hs/DataExchange' _content:b'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> \n<html xmlns="http://www.w3.org/1999/xhtml"> \n<head> \n<title>\xd0\x9f\xd0\xbe\xd0\xb4\xd1\x80\xd0\xbe\xd0\xb1\xd0\xbd\xd1\x8b\xd0\xb5 \xd0\xb4\xd0\xb0\xd0\xbd\xd0\xbd\xd1\x8b\xd0\xb5 \xd0\xbe\xd0\xb1 \xd0\xbe\xd1\x88\xd0\xb8\xd0\xb1\xd0\xba\xd0\xb5 IIS 10.0 \xe2\x80\x94 401.5 \xe2\x80\x94 Unauthorized</title> \n<style type="text/css"> \n<!-- \nbody{margin:0;font-size:.7em;font-family:Verdana,Arial,Helvetica,sans-serif;} \ncode{margin:0;color:#006600;font-size:1.1em;font-weight:bold;} \n.config_source code{font-size:.8em;color:#000000;} \npre{margin:0;font-size:1.4em;word-wrap:break-word;} \nul,ol{margin:10px 0 10px 5px;} \nul.first,ol.first{margin-top:5px;} \nfieldset{padding:0 15px 10px 15px;word-break:break-all;} \n.summary-container fieldset{padding-bottom:5px;margin-top:4px;} \nlegend.no-expand-all{padding:2px 15px 4px 10px;margin:0 0 0 -12px;} \nlegend{color:#333333;;margin:4px 0 8px -12px;_... _content_consumed:True _next:None |
|||
21
yurii-syrkin
22.04.20
✎
21:20
|
В IIS на уровне сайта в разделе проверка пользователя включена только Анонимная проверка пользователя и Обычная проверка пользователя. Может там ещё что то надо включить?
|
|||
22
Сияющий в темноте
23.04.20
✎
00:20
|
а почему бы не собрать авторизацию вручную через перевод строки в utf8,а потом в base64 у меня в javascript так рмботало прекрасно.
и еще,если у сервиса включен режим повторного использования (то есть use или auto),то он хочет команду начала сессии увидеть в заголовке или команду продолжения-если ее нет,то и будет 401 |
|||
23
yurii-syrkin
24.04.20
✎
18:34
|
Попробовал вот так:
respons = requests.get(myUrl, auth =('login'.encode('utf-8'), 'password'.encode('utf-8'))) status_code = respons.status_code print(status_code) При этом и так уже логин с паролем на английском языке. Всё равно ошибка 401. Вот что странно, когда я указываю логин и пароль админа Windows я получаю ошибку 401.5, а когда я указываю логин и пароль пользователя 1С, получаю ошибку 401.1. Само собой в файле default.vrd тоже пробовал указывать и те и те учетные данные. |
|||
24
yurii-syrkin
24.04.20
✎
18:47
|
Вот кусок лога IIS 10
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status time-taken 2020-04-23 20:49:44 ::1 GET /Uchet_Chasov/hs/DataExchange - 80 Tyson\sa ::1 python-requests/2.23.0 - 401 5 0 8 2020-04-23 20:49:44 ::1 GET /Uchet_Chasov/hs/DataExchange - 80 Tyson/sa ::1 python-requests/2.23.0 - 401 5 0 8 2020-04-23 20:49:44 ::1 GET /Uchet_Chasov/hs/DataExchange - 80 Yurii ::1 python-requests/2.23.0 - 401 1 1326 2 |
|||
25
Cyberhawk
24.04.20
✎
20:17
|
IIS поднастрой
|
|||
26
yurii-syrkin
24.04.20
✎
21:11
|
(25) Да я уже понял, всё к этому ведёт. Вот сижу читаю документацию на Microsoft. Не подскажешь на что более пристальное внимание обратить?
|
|||
27
acht
24.04.20
✎
22:25
|
(26) Оставь на иисе только анонимную авторизацию, чтобы он пробрасывал авторизацию в 1С. После этого или прибей гвоздями пользователя в vrd, или передавай басик авторизацию пользователя 1С. В какой кодировке - не помню, оставь логин/пароль латиницей.
|
|||
28
Сияющий в темноте
24.04.20
✎
22:44
|
попробуйте написать запрос в javascript через xmlhttprequest, и только когда он заработает,переходите на питон.
авторизация собирается через base64 и вставляется как поле заголовка. |
|||
29
yurii-syrkin
24.04.20
✎
22:58
|
В общем, расковырял IIS, оставил только обычную аутентификацию, то бишь Basic и теперь вместо 401 ошибки выходит 404.0. Уф, день прошёл не зря)
|
|||
30
Сияющий в темноте
24.04.20
✎
23:00
|
setRequestHeader('Authorization','Basic '+StringToBase64(User+':'+Password))
setRequestHeader('IBSession','start') |
|||
31
Сияющий в темноте
24.04.20
✎
23:01
|
этотв заголовки запроса,и должно взлететь.
|
|||
32
yurii-syrkin
24.04.20
✎
23:24
|
Да тут уже или в публикации дело или в сайте, потому что сейчас даже через браузер не могу увидеть свой json. А раньше мог
|
|||
33
Serginio1
24.04.20
✎
23:42
|
Самое простое это сделать запрос из 1С и посмотреть через фиддлер что уходит или используя postman https://software-testing.ru/library/testing/testing-tools/2638-postman
Если ты не можешь подклюючиться используя в vrd Usr=sa;Password=12345;" то явно проблема не с авторизацией |
|||
34
Fragster
гуру
24.04.20
✎
23:59
|
простейший способ - сделать юзера с именем и паролем английскими буквами
|
|||
35
Fragster
гуру
25.04.20
✎
00:03
|
а вообще - на js для русскоязычных логинов и паролей прокатывает так:
let res = await axios.get(uri, { auth: { username: unescape(encodeURIComponent(username)), password: unescape(encodeURIComponent(password)) } , при том, что для англоязычных можно прям как есть посылать. |
|||
36
novichok79
25.04.20
✎
01:15
|
попробовать через postman или попробовать поднять apache и проверить там.
|
|||
37
yurii-syrkin
25.04.20
✎
17:16
|
Переустановил IIS, переопубликовал сервис. Теперь снова ошибка 401.5 (По URL-адресу, куда надо попасть, установлено приложение ISAPI или CGI, выполняющее проверку учетных данных пользователя до начала обработки данных. Данное приложение не может проверить ваши учетные данные). Поставил postman, попробовал там сделать это запрос, ответ тот же. Честно говоря не очень вообще врубился зачем этот CGI вообще мне нужен. Я его даже не выбрал в установке. А в разделе Ограничения ISAPI и CGI у IIS вообще всё удалил. К вопросу о том на кирилице ли у меня пароль с логином. Нет, всё на латинице и пароль и логин и в 1С и в Windows.
|
|||
38
Cyberhawk
25.04.20
✎
18:39
|
(26) Для начала - отключить в пуле управляемый код
|
|||
39
yurii-syrkin
25.04.20
✎
22:47
|
Всем огромное спасибо, братва! Очередной раз переустановил IIS без всяких способов аутентификации. Настроил обработчики, MIME типы, анонимную проверку подлинности. В итоге в браузер захожу на http сервис, запрашивает авторизацию 1С-овской учётки, показывает json. И в python тоже возвращает 200-й код всеми способами и через (requests.get(myUrl, auth =('Login', 'Password'))) и через (requests.get(myUrl, headers= {'Authorization': 'Basic'}, auth =('Login', 'Password'))) и так (requests.get(myUrl, auth =('Login'.encode('utf-8'), 'Password'.encode('utf-8')))). Аллилуйя, не прошло и недели)
|
|||
40
Aleksk75
21.05.20
✎
15:43
|
Юрий, а логин-пароль пользователя 1С или Win указывали?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |