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>
올바른 URL을 전달하고 있는지 확인할 수 있습니까? SOAP 클라이언트로이 URL을 사용해 보았고 정상적으로 작동 했습니까? 그것은 "http : // some_IP_here/Service? wsdl'' 형식으로되어 있어야합니다. – Galil
@ 갤런 저는 인터넷 익스플로러를 열 수 있지만 크롬은 열 수 없습니다. 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
URL 변수에''? wsdl''을 추가 했습니까? 다음과 같이 : "URL ="http : // "+ IP +"/ Service? wsdl "''. 당신의 기능을 다시 테스트 했습니까? – Galil