Criar um cliente em python para um web service soap

2,118 views
Skip to first unread message

Antonio Padez de Castro

unread,
Jul 19, 2018, 12:28:50 PM7/19/18
to Python Brasil
Boa tarde,

Estou a tentar criar um cliente em python para um web service soap.

Mas estou com alguma dificuldade em encontrar exemplos de código.

Já tenho algumas bibliotecas instaladas no meu python para desenvolver o codigo, ex: zeep, suds, SOAPpy.

Alguém me pode dizer onde consigo encontrar exemplos de código python para um web service soap?

Obrigado desde já pela ajuda.

Thiago M. de França

unread,
Jul 19, 2018, 12:37:53 PM7/19/18
to python...@googlegroups.com

--
--
------------------------------------
Grupo Python-Brasil
https://wiki.python.org.br/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com
---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para python...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/python-brasil/7f493139-554f-43b0-8ca3-8e8a55af7caa%40googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.


--

All it takes is one bad day to reduce the sanest man alive to lunacy.
That's how far the world is from where i am.
Just one bad day!

Iuri

unread,
Jul 19, 2018, 12:51:06 PM7/19/18
to python...@googlegroups.com
A documentação do zeep é bem completa, te mostra logo no começo como consumir um serviço externo.


On Thu, Jul 19, 2018 at 1:29 PM Antonio Padez de Castro <antoniopad...@gmail.com> wrote:
--

Thiago Oliveira

unread,
Jul 19, 2018, 8:52:43 PM7/19/18
to python...@googlegroups.com
Consumir vai ser fácil , servir da uma dor de cabeça ..... 

Python e SOAP não são muito...  íntimos . 


Para mais opções, acesse https://groups.google.com/d/optout.
--
Atenciosamente, 
THIAGO DE OLIVEIRA VICENTE
FONE:        3565-6757
CELULAR:  97051-3508 

Luciano Azevedo

unread,
Jul 19, 2018, 10:44:14 PM7/19/18
to python...@googlegroups.com

Felizmente, diga-se de passagem. Assim ninguém te a infeliz ideia de usar com python.

 

[ ]'s
Luciano Azevedo
Arquiteto de Solucoes
Skype : llopesa - tel 11983335995

 


De: python...@googlegroups.com <python...@googlegroups.com> em nome de Thiago Oliveira <oliveirav...@gmail.com>
Enviado: Thursday, July 19, 2018 9:52:24 PM
Para: python...@googlegroups.com
Assunto: Re: [python-brasil] Criar um cliente em python para um web service soap
 

Antonio Padez de Castro

unread,
Jul 20, 2018, 4:16:25 AM7/20/18
to Python Brasil
Já consigo criar o cliente.

Agora estou a tentar criar um serviço.

Encontrei este exemplo de código:

def test_soap11_no_output():
    client
= Client('tests/wsdl_files/soap.wsdl')
    content
= """
        <soapenv:Envelope
            xmlns:soapenv="
http://schemas.xmlsoap.org/soap/envelope/"
            xmlns
:stoc="http://example.com/stockquote.xsd">
         
<soapenv:Body></soapenv:Body>
       
</soapenv:Envelope>
   
""".strip()
    response = stub(
        status_code=200,
        headers={},
        content=content)

    operation = client.service._binding._operations['GetLastTradePriceNoOutput']
    res = client.service._binding.process_reply(client, operation, response)
    assert res is None

 
Alguém me sabe dizer onde posso encontrar mais exemplos de código para criar um serviço GET?

Mais uma vez obrigado pela ajuda.

Iuri

unread,
Jul 20, 2018, 8:37:10 AM7/20/18
to python...@googlegroups.com
Concordo com a dificuldade de fazer um server SOAP.

Existe o soapfish que gera o código Python a partir do seu WSDL e consegue integrar com Flask ou Django. https://github.com/soapteam/soapfish

Não é tão simples, alguns tipos não estão bem implementados, mas funciona bem. Tenho usado em produção há alguns anos já.

Edson Garrido

unread,
Jul 20, 2018, 12:46:22 PM7/20/18
to python...@googlegroups.com
Já passei por essa dor. Acabei fazendo em Java. Doeu, mas doeu menos. 

Antonio Padez de Castro

unread,
Jul 24, 2018, 10:45:42 AM7/24/18
to Python Brasil
Eu imagino..

Não tem sido uma tarefa nada fácil.

Entretanto já consegui avançar um pouco mais, e consigo já receber o Token ID de um Web Service STS.

Mas agora estou tendo bastantes dificuldades em fazer um parser da resposta do XML onde obtive o Token ID.

Alguém sabe onde posso encontrar um exemplo em código python?

Linux - Junior Polegato

unread,
Jul 24, 2018, 2:01:25 PM7/24/18
to python...@googlegroups.com
Em 24-07-2018 11:45, Antonio Padez de Castro escreveu:
> Não tem sido uma tarefa nada fácil.
> Entretanto já consegui avançar um pouco mais, e consigo já receber o
> Token ID de um Web Service STS.
> Mas agora estou tendo bastantes dificuldades em fazer um parser da
> resposta do XML onde obtive o Token ID.
> Alguém sabe onde posso encontrar um exemplo em código python?

Olá!

        Uso o suds com algumas modificações para consumir os
webservices da NFe (PoleNFe [1]), também fiz uma outra biblioteca para
tratar de forma mais Pythônica os XMLs (PoleXML [2]), se ajudar:

[1] https://github.com/JuniorPolegato/pole/blob/master/src/pole/PoleNFe.py
[2] https://github.com/JuniorPolegato/pole/blob/master/src/pole/PoleXML.py


--

[]'s

Junior Polegato

Clayton

unread,
Jul 24, 2018, 3:41:38 PM7/24/18
to python...@googlegroups.com
Antônio,

Fazer um cliente Soap no python tem algumas dificuldades mesmo, mas já faz anos que utilizo alguns clientes SOAPpy, suds e mais recente o zeep em portais Plone.
Cada biblioteca foi utilizada para um tipo de SOAP Ex: Java ou .Net antigos (Document style, RPC style, Axis 1, Axis 2, jax-ws etc).
Fizemos alguns clientes que se encontram aqui [1] e o retorno deles é sempre um dicionário, como usar [2]:

1 - webservice_caller (SOAPpy) - para webservices soap simples exemplo rpc style

parms = (nome, telefone, cep)
ws = webservice_caller(wsdl='URL?WSDL', method='get-postAlgumaCoisa', parameters=parms, timeout=20)

2 - webservice_caller_axis (SOAPpy): para axis 2

parms = (nome, telefone, cep)
ws_value = webservice_caller_axis(wsdl='URL?WSDL', method='get-postAlgumaCoisa', parameters=parms,  v_namespace='URL', v_soapaction='URL/get-postAlgumaCoisa',  timeout=20)
print(ws_value)
OBS: as urls do v_namespace e v_soapaction fica no WSDL.

3 - call_webservice (suds): esse atente a maioria do SOAPpy e https.

parms = {'nome': nome, 'telefone': telefone, 'cep': cep, 'timeout': 20}
ws_value = call_webservice(wsdl=''URL?WSDL', method='get-postAlgumaCoisa', parameters=parms)
print(ws_value)

OU

parms = {'nome': nome, 'telefone': telefone, 'cep': cep, 'timeout': 20}
imp = Import('http://schemas.xmlsoap.org/soap/encoding/')
doctor = ImportDoctor(imp)
client = Client('url?wsdl')
ws_value = getattr(client.service, 'get_postAlgumaCoisa')(**parms)
print(ws_value)

4 - zeep utilizamos só em alguns, pois ficou muito lento comparado com o SOAPpy e suds.

session = Session()
session.verify = False
transport = Transport(session=session, timeout=30)
parms = {'nome': nome, 'telefone': telefone, 'cep': cep, 'timeout': 20}

client = Client('url?wsdl', transport=transport)
result = client.service.get_postAlgumaCoisa(parms)
result = helpers.serialize_object(result)
print(result)


abraços,

Clayton




--
--
------------------------------------
Grupo Python-Brasil
https://wiki.python.org.br/AntesDePerguntar

<*> Para visitar o site do grupo na web, acesse:
    http://groups.google.com/group/python-brasil

<*> Para sair deste grupo, envie um e-mail para:
    python-brasi...@googlegroups.com
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Python Brasil" dos Grupos do Google.

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para postar neste grupo, envie um e-mail para python...@googlegroups.com.
Para ver esta discussão na web, acesse https://groups.google.com/d/msgid/python-brasil/6bc523e4-08bc-9205-b357-578c857e8c17%40juniorpolegato.com.br.
Para obter mais opções, acesse https://groups.google.com/d/optout.
Reply all
Reply to author
Forward
0 new messages