2013-10-08 2 views
0

WSDL 파일을 사용하는 간단한 SOAP 클라이언트를 Python으로 작성하려고합니다. 나는 pysimplesoap과 SUDS를 시도했으며, 둘 다 여러 가지 이유로 실패합니다.Python의 단순 SOAP 클라이언트

from pysimplesoap.client import SoapClient 

wsdl = "http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl" 
client = SoapClient(wsdl=wsdl) 

print client 

pysimplesoap 클라이언트 AttributeError: Tag not found: service (No elements found)

from SOAPpy import WSDL 
wsdlFile = "http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl" 
server = WSDL.Proxy(wsdlFile) 

SOAPpy 클라이언트가 예외를 발생 IndexError: list index out of range 실패.

저는 SOAP에 대한 초보자이기 때문에 어딘가에서 아주 기본적인 오류가 발생했다고 생각합니다. 비눗물로

답변

0

:

이 devicemgmt.wsdl 파일의 끝에

<wsdl:service name="DeviceService"> 
    <wsdl:port binding="tds:DeviceBinding" name="DevicePort"> 
    <soap:address location="http://localhost/onvif/device_service/"/> 
    </wsdl:port> 
</wsdl:service> 

사이 를 추가합니다. 원래 WSDL은 정의 된 서비스를하지 않았고이 비눗물 불행이었다 이유였다

스크립트 :

import suds 
import os 

SERVER_URL = 'http://<INSERT_YOUR_CAMERAS_IP_HERE>:80/device_service' 
WSDL_URL='file:' + os.getcwd() + '/wsdl/devicemgmt.wsdl' 
cli=suds.client.Client(WSDL_URL) 
cli.set_options(location=SERVER_URL) 
security = suds.wsse.Security() 
token = suds.wsse.UsernameToken('<INSERT_YOUR_USERNAME>', '<INSERT_YOUR_PASSWORD>') 
token.setnonce('<INSERT_YOUR_NONCE>') # token.setonce() didn't work for me 
token.setcreated() 
security.tokens.append(token) 
cli.set_options(wsse=security) 

res=cli.service.GetDeviceInformation() 
print res 

는 "인쇄 CLI는"작동하지 만 신경 쓰지 않습니다 ... 위치의 wsdl은 ./wsdl/devicemgmt.wsdl이고 wsdl에서 참조 된 파일은 동일한 위치에 있습니다 (링크 수정 후)

+0

게시물에이어서 devicemgmt.wsdl 파일을 다운로드하고 ' '단편이 게시되었고 파일의 끝에, 바로 앞에 놓았습니다. 이제 예외가 발생했습니다 : 예외 : 정의 된 서비스가 없습니다. 나는 이것이 천천히 진행되고 있다고 생각합니다 ... – CadentOrange

+0

너무 가까이에. onvif.xsd가 ONVIF 웹 사이트에서 직접 제공되도록 devicemgmt.wsdl을 편집했습니다. 이제 502 "잘못된 게이트웨이"오류가 발생합니다. – CadentOrange