Desejo usar um serviço da Web baseado em WSDL SOAP em Python. Eu observei o código Dive Into Python , mas o módulo SOAPpy não funciona no Python 2.5.
Eu tentei usar o suds, que funciona parcialmente, mas quebra com certos tipos (suds.TypeNotFound: Type not found: 'item').
Eu também olhei para o cliente, mas isso não parece oferecer suporte ao WSDL.
E eu olhei para o ZSI, mas parece muito complexo. Alguém tem algum código de exemplo para isso?
O WSDL é https://ws.pingdom.com/soap/PingdomAPI.wsdl e funciona bem com o cliente SOAP do PHP 5.
python
web-services
soap
davidmytton
fonte
fonte
Respostas:
Eu recomendaria que você desse uma olhada no SUDS
"O Suds é um cliente python SOAP leve para consumir serviços da Web."
fonte
Existe uma biblioteca relativamente nova que é muito promissora e, embora ainda mal documentada, parece muito limpa e pitônica : python zeep .
Veja também esta resposta para um exemplo.
fonte
Recentemente, me deparei com o mesmo problema. Aqui está a sinopse da minha solução:
Blocos básicos de código constituinte necessários
A seguir, estão os blocos de código básico necessários do seu aplicativo cliente
Quais módulos você precisa?
Muitos sugeriram o uso de módulos Python como o urllib2; no entanto, nenhum dos módulos funciona, pelo menos para este projeto em particular.
Então, aqui está a lista dos módulos que você precisa obter. Primeiro de tudo, você precisa baixar e instalar a versão mais recente do suds no seguinte link:
Além disso, você precisa fazer o download e instalar módulos de solicitações e suds_requests a partir dos seguintes links, respectivamente (aviso de isenção de responsabilidade: sou novo em publicar aqui, portanto não posso postar mais de um link no momento).
Depois de baixar e instalar esses módulos, você estará pronto.
O código
Seguindo as etapas descritas anteriormente, o código é semelhante ao seguinte: Importações:
Solicitação e autenticação de sessão:
Crie o cliente:
Adicione o cabeçalho WS-Security:
Observe que este método cria o cabeçalho de segurança descrito na Fig.1. Portanto, sua implementação pode variar dependendo do formato correto do cabeçalho de segurança fornecido pelo proprietário do serviço que você está consumindo.
Consumir o método (ou operação) relevante:
Registro :
Uma das melhores práticas em implementações como esta é o log para ver como a comunicação é executada. Caso haja algum problema, isso facilita a depuração. O código a seguir faz o log básico. No entanto, você pode registrar muitos aspectos da comunicação, além dos descritos no código.
Resultado:
Aqui está o resultado no meu caso. Observe que o servidor retornou o HTTP 200. Esse é o código de sucesso padrão para a solicitação-resposta HTTP.
fonte
suds_request
irá falhar durante a instalação, por isso, se você estiver usandosuds-jurko
um garfo, você pode instalarsuds_request
o qual foi adaptado para trabalhar com a versão de Jurko de espuma:pip install git+https://github.com/chrcoe/suds_requests.git@feature/python3_suds_jurko
No momento (a partir de 2008), todas as bibliotecas SOAP disponíveis para o Python são péssimas. Eu recomendo evitar SOAP, se possível. Na última vez em que fomos forçados a usar um serviço Web SOAP do Python, escrevemos um wrapper em C # que tratava o SOAP de um lado e falava COM do outro.
fonte
O Zeep é uma biblioteca SOAP decente para Python que corresponde ao que você está pedindo: http://docs.python-zeep.org
fonte
Eu procuro periodicamente por uma resposta satisfatória para isso, mas sem sorte até agora. Eu uso soapUI + pedidos + trabalho manual.
Desisti e usei o Java da última vez que precisei , e simplesmente desisti algumas vezes da última vez que queria fazer isso, mas não era essencial.
Tendo usado com sucesso a biblioteca de solicitações no ano passado com a API RESTful do Project Place, ocorreu-me que talvez eu pudesse apenas rolar manualmente as solicitações SOAP que desejo enviar de maneira semelhante.
Acontece que isso não é muito difícil, mas é demorado e propenso a erros, especialmente se os campos tiverem um nome inconsistente (o que eu estou trabalhando atualmente hoje tem 'jobId', JobId 'e' JobID '. Eu uso o soapUI para carregar o WSDL para facilitar a extração de pontos de extremidade etc. e realizar alguns testes manuais Até agora, tive a sorte de não ter sido afetado por alterações em nenhum WSDL que estou usando.
fonte
Não é verdade que o SOAPpy não funciona com o Python 2.5 - funciona, embora seja muito simples e muito, muito básico. Se você deseja conversar com qualquer serviço da Web mais complicado, o ZSI é seu único amigo.
A demonstração realmente útil que encontrei está em http://www.ebi.ac.uk/Tools/webservices/tutorials/python - isso realmente me ajudou a entender como o ZSI funciona.
fonte
Se você está criando o seu próprio, eu recomendo olhar http://effbot.org/zone/element-soap.htm .
fonte
O SOAPpy agora está obsoleto, AFAIK, substituído por ZSL. É um ponto discutível, porque não consigo que nenhum deles funcione, muito menos compile, no Python 2.5 ou no Python 2.6
fonte
fonte