LINUX.ORG.RU

Python & SOAP прошу помощи.

 ,


0

1

Добрый вечер, есть некое API на SOAP. пытаюсь к нему достучатся используя suds-py3 в python при любом запросе получаю в ответ

suds.transport.TransportError: HTTP Error 405: Method Not Allowed

пример кода

from suds.client import Client
client = Client('http://XXXXXXXXXXX:7878')
print(client)

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

и не понимаю как передать urn:tc, я думаю проблема в этом. пытался использовать Zeep проблема такая же.

А покажи как из requests все работает

gnunixon ★★★
()
Ответ на: комментарий от WitcherGeralt

По requests уже блин потер то что набрасывал ;((((

Вот ответ от curl.

root@:~# curl -v http://XXXXXXXXXXX:7878
* Expire in 0 ms for 6 (transfer 0x55bd885ecf50)
*   Trying XXXXXXXXXXX...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x55bd885ecf50)
* Connected to XXXXXXXXXXX (XXXXXXXXXXX) port 7878 (#0)
> GET / HTTP/1.1
> Host: XXXXXXXXXXX:7878
> User-Agent: curl/7.64.0
> Accept: */*
>
< HTTP/1.1 405 Method Not Allowed
< Server: gSOAP/2.8
< X-Frame-Options: SAMEORIGIN
< Content-Type: text/xml; charset=utf-8
< Content-Length: 408
< Connection: close
<
<?xml version="1.0" encoding="UTF-8"?>
* Closing connection 0
<SOAP-ENV:Fault xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema" xmlns:ns1="urn:TC"><faultcode>in message exchange</faultcode><faultstring>HTTP GET method not implemented</faultstring></SOAP-ENV:Fault>
root@:~#
yegapo3970
() автор топика
Ответ на: комментарий от yegapo3970

может дело в авторизации? но тоже не понятно как передавать…

yegapo3970
() автор топика
Ответ на: комментарий от yegapo3970

Теперь curl -v -d '<?xml version="1.0"?><soap:foo>bar</soap:foo>' $url.

Такая штука, что soap поддерживает GET только в спецификации, а по факту большинство серверов тебе ответил 405. Да и нужный ресурс в теле запроса всё равно надо указывать.

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

Ну а так хоть 500 возвращает....

root@:~# curl -v -d '<?xml version="1.0"?><soap:foo>bar</soap:foo>' http://XXXXXXXXXX:7878
* Expire in 0 ms for 6 (transfer 0x5580e4d21f50)
*   Trying XXXXXXXXXX...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x5580e4d21f50)
* Connected to XXXXXXXXXX (XXXXXXXXXX) port 7878 (#0)
> POST / HTTP/1.1
> Host: XXXXXXXXXX:7878
> User-Agent: curl/7.64.0
> Accept: */*
> Content-Length: 45
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 45 out of 45 bytes
< HTTP/1.1 500 Internal Server Error
< Server: gSOAP/2.8
< X-Frame-Options: SAMEORIGIN
< Content-Type: text/xml; charset=utf-8
< Content-Length: 451
< Connection: close
<
<?xml version="1.0" encoding="UTF-8"?>
* Closing connection 0
<SOAP-ENV:Fault xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema" xmlns:ns1="urn:TC"><faultcode>in message exchange</faultcode><faultstring>Method 'soap:foo' not implemented: method name or namespace not recognized</faultstring></SOAP-ENV:Fault>
root@:~#
yegapo3970
() автор топика
Ответ на: комментарий от yegapo3970

Так не понятно что с либами питона… что не так то делаю. почему сразу 405 как будто обычный GET…

yegapo3970
() автор топика
Ответ на: комментарий от yegapo3970

Я хз, должен быть способ заставить, видимо. Проверь ещё URL свой, может / в конце добавить надо, некоторые сервисы могут 302 Redirect на URL со слешем ответить и тогда твой POST превратится в GET-тыкву.

cocucka ★★★★☆
()
Ответ на: комментарий от cocucka

не дело не в слеше. урл точно корректный. что то с параметрами. или с SOAP клиентами в питоне.

yegapo3970
() автор топика
Ответ на: комментарий от yegapo3970

Ещё бы не 500, тело запроса-то рандомное, заведомо некорректное. Это я тебе просто наглядное демо провёл, чтобы ты сам всё понял.

Насчёт suds ничего подскажу, не юзал. Первый взгляд на документацию говорит мне о том, что там генерация запросов происходит с помощью псевдо-ООП. Похоже, что, зная доступные ресурсы, ты должен обращаться к нужному как к атрибуту клиента и дёргать его методы так, будто это реальный объект у тебя в коде.

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

что то из питон либ для soap порекомендуешь? и может подскажешь как передать 'uri' => 'urn:TC' я так понимаю проблема именно в этом (

yegapo3970
() автор топика
Ответ на: комментарий от yegapo3970

С soap я очень давно не сталкивался, по-этому ничего рекомдовать не буду. Что судс, что zeep, бери что угодно, только документацию почитай.

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

WitcherGeralt ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.