2017-09-11 7 views
0

SOAP 요청을 수행하는 데 ZEEP을 사용하려고합니다. WSDL의 wsdl : service definitions가 누락되었습니다.

나는이 요청 가지고 :

def status(request, IP): 
    URL = "http://" + IP + "/Service" 
    session = Session() 
    session.auth = HTTPBasicAuth('username', 'password') 
    client = Client(URL, 
        transport=Transport(session=session), strict=False) 

    response = client.service.Method1(request={'getList'}) 

    return response 

을하지만 WSDL없는 오류를 치고있어 다음 WSDL에서 서비스 정의를.

내가 걸려있어 더 이상 오류 검색을 찾을 수 없습니다. 어떤 아이디어 있니?

컨텍스트에 맞게 편집하십시오. 이것은 작동하는 하드 코딩 요청 내가 zeep 함께 할 노력하고있어 다음 WSDL을 추가

def GetList(session, IP):   

     request = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">' 
     request = request + '<soapenv:Header>' 
     request = request + '<session>' + session + '</session>' 
     request = request + ' </soapenv:Header>' 
     request = request + ' <soapenv:Body>' 
     request = request + '<getList/>' 
     request = request + '</soapenv:Body>' 
     request = request + '</soapenv:Envelope>' 

     request = u"""""" + request + """""".format() 

     encoded_request = request.encode('utf-8') 

     headers = {"Host": ""+ IP +"", 
        "Content-Type": "text/xml; charset=UTF-8", 
        "Content-Length": str(len(encoded_request)), 
        "SOAPAction": ""} 

     response = requests.post(url="http://"+ url +"/Service", 
           headers=headers, 
           data=encoded_request, 
           verify=False) 

     return response.content 

편집 2. 당신은 당신의 URL 변수의 끝에 ?wsdl을 추가해야

<?xml version="1.0" encoding="UTF-8"?>  
-<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:intf="http://xml.apache.org/axis/wsdd/ " xmlns:impl="http://xml.apache.org/axis/wsdd/ " xmlns:apachesoap="http://xml.apache.org/xml-soap" targetNamespace="http://xml.apache.org/axis/wsdd/ ">  
-<wsdl:types>  
-<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://xml.apache.org/axis/wsdd/ ">  
<element type="xsd:anyType" name="parseMessage"/>  
<element type="xsd:anyType" name="parseMessageReturn"/>  
</schema>  
</wsdl:types>  
-<message name="parseMessageResponse">  
<part name="parseMessageReturn" element="impl:parseMessageReturn"/>  
</message>  
-<message name="parseMessageRequest">  
<part name="part" element="impl:parseMessage"/>  
</message>  
-<portType name="MessageHandlerProxy">  
-<operation name="parseMessage">  
<input name="parseMessageRequest" message="impl:parseMessageRequest"/>  
<output name="parseMessageResponse" message="impl:parseMessageResponse"/>  
</operation>  
</portType>  
-<binding type="impl:HandlerProxy" name="ServiceBinding">  
<wsdlsoap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>  
-<operation name="parseMessage">  
<wsdlsoap:operation soapAction=""/>  
-<input name="parseMessageRequest">  
<wsdlsoap:body use="literal" namespace="http://xml.apache.org/axis/wsdd/ "/>  
</input>  
-<output name="parseMessageResponse">  
<wsdlsoap:body use="literal" namespace="http://xml.apache.org/axis/wsdd/ "/>  
</output>  
</operation>  
</binding>  
-<service name="ProxyService">  
-<port name="Service" binding="impl:ServiceBinding">  
<wsdlsoap:address location="http://ip.ip.ip.ip/Service"/>  
</port>  
</service>  
</definitions> 
+0

올바른 URL을 전달하고 있는지 확인할 수 있습니까? SOAP 클라이언트로이 URL을 사용해 보았고 정상적으로 작동 했습니까? 그것은 "http : // some_IP_here/Service? wsdl'' 형식으로되어 있어야합니다. – Galil

+0

@ 갤런 저는 인터넷 익스플로러를 열 수 있지만 크롬은 열 수 없습니다. Chrome에서 207 번째 줄에 _error 오류가 발생합니다. xmlns : impl : 'http://xml.apache.org/axis/wsdd/'이 (가) 올바른 URI가 아닙니다. 그리고 'python -mzeep URL? wsdl' 크롬과 동일한 오류가 발생합니다. _zeep.exceptions.XMLSyntaxError : 유효하지 않은 XML 콘텐츠가 수신되었습니다 (xmlns : impl : 'http://xml.apache.org/axis/wsdd/'는 유효한 URI, 2 행, column이 아닙니다. 207) _ ''python -mzeep --no-strict URL? wsdl'을 실행해도 아무런 오류가 없습니다. – sumpen

+0

URL 변수에''? wsdl''을 추가 했습니까? 다음과 같이 : "URL ="http : // "+ IP +"/ Service? wsdl "''. 당신의 기능을 다시 테스트 했습니까? – Galil

답변

0

.

또한 전화 걸기 방법이 올바르지 않습니다. getList에 대한 전화는 다음과 같아야합니다.

def status(request, IP): 
    URL = "http://" + IP + "/Service?wsdl" 
    session = Session() 
    session.auth = HTTPBasicAuth('username', 'password') 
    client = Client(URL, 
        transport=Transport(session=session), strict=False) 

    response = client.service.getList([add the arguments here]) 

    return response 
+0

오류가 발생했습니다. AttributeError _Service에 작업이 없습니다.'getList'_ 위의 예외 처리 중 {http://xml.apache.org/axis/wsdd/} MessageServiceBinding에서 이와 같은 작업 'getList'가 발생하지 않았으므로 또 다른 예외가 발생했습니다. _ _http : //xml.apache가 아니기 때문에 이상합니다. org/axis/wsdd/_ – sumpen

+0

당신이받는 오류는 그런 호출이 없다는 것을 의미합니다. ''getList''라는 호출이 있습니까? 철자가 맞습니까? 나는''getList'' 호출을 예제로 사용했습니다. 사용할 API 호출의 이름으로 대체해야합니다. – Galil

+0

네, 맞습니다. 질문을 업데이트했습니다. 이것은 작동중인 하드 코드 된 요청의 예입니다. 그리고 이 호출 된 것을 볼 수 있습니다. 그래서 하드 코딩 된 코드로 요청을 할 수 있습니다. 하지만 지프는 아닙니다. 그리고 내가 뭘 잘못하고 있는지 알 수 없습니다. 당신이 제공하는 모든 도움에 정말 감사드립니다. – sumpen