Мыльный клиент Python – проблема с подключением

Я использую клиент API мыла Python Zeep, и вот код, который я написал:

from zeep import Client

def myapi(request):
    client = Client("https://siteURL.asmx?wsdl")
    key = client.service.LogOnUser('myusername', 'mypassord')
    print(key)

это дает мне ошибку как: [WinError 10060] Попытка подключения не удалась, потому что подключенная сторона не ответила должным образом через некоторое время, или установленное соединение не удалось, потому что подключенный хост не ответил

Пока я пытаюсь выполнить команду ниже, URL-адрес работает хорошо и показывает все службы, которые у него есть.

python -mzeep https://siteURL.asmx?wsdl

Пожалуйста, помогите понять, по какой причине приведенный выше код не работает.

PS: я не мог поделиться URL-адресом сайта, к которому я пытаюсь подключиться.

Дополнительная информация: сайт/страница доступна только через интрасеть, и я тестирую локально из самой интрасети.

Ошибка трассировки:

Exception Type: ConnectionError at /music/mypersonalapi/
Exception Value: HTTPSConnectionPool(host='URL I have hidden', port=81): 
Max retries exceeded with url: /ABC/XYZ/Logon.asmx
(Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x0546E770>: 
Failed to establish a new connection:
[WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond',))

Обратите внимание: я удалил URL-адрес и информацию о хосте из моей трассировки из соображений конфиденциальности.


person Cнιяαg    schedule 30.08.2018    source источник
comment
Я думаю, вы сделали по крайней мере пару ошибок копирования-вставки в своем примере кода (client против my_client, Key: " & key), вы также забыли включить трассировку.   -  person thebjorn    schedule 30.08.2018
comment
Спасибо за проверку... но я использовал клиент... он вызывал проблемы. не понял, что вы имеете в виду под трассировкой.   -  person Cнιяαg    schedule 30.08.2018
comment
Трассировка — это сообщения, которые Python печатает, когда выдает ошибку. Посмотрите в нижней части этого вопроса пример: stackoverflow.com/questions/4761874/ (это говорит вам, где произошла ошибка и что произошло непосредственно перед ней).   -  person thebjorn    schedule 30.08.2018
comment
Вот что показывает последняя строка трассировки: Тип исключения: ConnectionError at /music/mypersonalapi/ Значение исключения: HTTPSConnectionPool(host='URL, который я скрыл', port=81): превышено максимальное количество повторных попыток с URL-адресом: /ABC/XYZ/Logon. asmx (вызвано NewConnectionError('‹urllib3.connection.VerifiedHTTPSConnection object at 0x0546E770›: Не удалось установить новое соединение: [WinError 10060] Попытка подключения не удалась, поскольку подключенная сторона не ответила должным образом через некоторое время или установила соединение не удалось, потому что подключенный хост не ответил',))   -  person Cнιяαg    schedule 31.08.2018
comment
Пожалуйста, обновите свой вопрос (он имеет отношение к вопросу, а комментарии теряют все форматирование).   -  person thebjorn    schedule 31.08.2018
comment
Я думаю, проблема в том, что... сервер не может понять, что запрос поступает только из локальной системы, или другая проблема может заключаться в том, что скрипт не может передавать информацию по https?   -  person Cнιяαg    schedule 31.08.2018
comment
Сайт/страница доступна только через интранет Не могли бы вы попробовать http вместо https. Я подозреваю проблемы с «отсутствием пакета файлов cookie», на которые http не повлияет.   -  person Davesoft    schedule 31.08.2018
comment
Спасибо за ответ: если я выполню python -mzeep siteURL.asmx?wsdl (с http вместо https это не ничего не возвращает, работает только с https)   -  person Cнιяαg    schedule 31.08.2018
comment
Не уверен, что это поможет, у нас была аналогичная проблема в коде .net, и мы смогли исправить ее, добавив одну строку: binding.Security.Mode = BasicHttpSecurityMode.Transport; есть ли что-то подобное в питоне, которое мы можем сделать?   -  person Cнιяαg    schedule 31.08.2018


Ответы (1)


Что это делает:

python -mzeep https://site/url.asmx?wsdl

is:

c = Client("https://site/url.asmx?wsdl")
c.wsdl.dump()

обе альтернативы используют порт 443, так как это порт https по умолчанию.

Из вашей трассировки мы видим

Exception Value: HTTPSConnectionPool(host='URL I have hidden', port=81): 

что было бы похоже на

python -mzeep https://site:81/url.asmx?wsdl

т.е. командная строка и ваш код не подключаются к одному и тому же адресу (также обратите внимание, что значения порта меньше 1024 требуют разрешений на системном уровне для использования - в случае, если вы также пишете/управляете службой).

В последней строке говорится: «.. не удалось, потому что подключенная сторона не ответила должным образом через некоторое время ...», но это не основная причина. В строке 3 вы можете прочитать

Max retries exceeded with url: /ABC/XYZ/Logon.asmx

другими словами, вы пытались (и не смогли) войти в систему слишком много раз, и сервер, вероятно, удваивает время, которое он использует для ответа каждый раз, когда вы пытаетесь (хорошо известная стратегия смягчения последствий для «вещей», которые не могут войти в систему несколько раз). -- т.е. выглядеть как атака). Длительная задержка, скорее всего, вызывает сообщение об ошибке, которое вы видите внизу.

Вам нужно будет подождать некоторое время или сбросить свою учетную запись для службы, а если служба принадлежит вам, то, возможно, отключить эту функцию во время разработки?

person thebjorn    schedule 31.08.2018
comment
Большое спасибо за изучение этого и подробное объяснение каждой из строк. - person Cнιяαg; 01.09.2018
comment
Всегда пожалуйста. Если мой ответ был полезен, нажмите стрелку вверх в верхней части ответа, а если он ответил на ваш вопрос, нажмите галочку под стрелками вверх/вниз. Это поможет людям, которые найдут этот вопрос и ответ в будущем, увидеть, что сработало (и это даст мне виртуальные баллы ;-) - person thebjorn; 01.09.2018
comment
Я пробовал делать стрелку вверх, кажется, я очень новичок (менее 15 повторений), поэтому мне не разрешается делать стрелку вверх. - person Cнιяαg; 03.09.2018