def do_POST(self): '''The POST command. ''' try: ct = self.headers['content-type'] if ct.startswith('multipart/'): cid = resolvers.MIMEResolver(ct, self.rfile) xml = cid.GetSOAPPart() ps = ParsedSoap(xml, resolver=cid.Resolve) else: length = int(self.headers['content-length']) ps = ParsedSoap(self.rfile.read(length)) except ParseException as e: self.send_fault(FaultFromZSIException(e)) return except Exception as e: # Faulted while processing; assume it's in the header. self.send_fault(FaultFromException(e, 1, sys.exc_info()[2])) return _Dispatch(ps, self.server.modules, self.send_xml, self.send_fault, docstyle=self.server.docstyle, nsdict=self.server.nsdict, typesmodule=self.server.typesmodule, rpc=self.server.rpc)
def do_POST(self): '''The POST command. This is called by HTTPServer, not twisted. action -- SOAPAction(HTTP header) or wsa:Action(SOAP:Header) ''' global _contexts soapAction = self.headers.getheader('SOAPAction') post = self.path if not post: raise PostNotSpecified, 'HTTP POST not specified in request' if soapAction: soapAction = soapAction.strip('\'"') post = post.strip('\'"') try: ct = self.headers['content-type'] if ct.startswith('multipart/'): cid = resolvers.MIMEResolver(ct, self.rfile) xml = cid.GetSOAPPart() ps = ParsedSoap(xml, resolver=cid.Resolve, readerclass=DomletteReader) else: length = int(self.headers['content-length']) ps = ParsedSoap(self.rfile.read(length), readerclass=DomletteReader) except ParseException, e: self.send_fault(FaultFromZSIException(e))
def AsCGI(nsdict={}, typesmodule=None, rpc=False, modules=None): '''Dispatch within a CGI script. ''' if os.environ.get('REQUEST_METHOD') != 'POST': _CGISendFault(Fault(Fault.Client, 'Must use POST')) return ct = os.environ['CONTENT_TYPE'] try: if ct.startswith('multipart/'): cid = resolvers.MIMEResolver(ct, sys.stdin) xml = cid.GetSOAPPart() ps = ParsedSoap(xml, resolver=cid.Resolve) else: length = int(os.environ['CONTENT_LENGTH']) ps = ParsedSoap(sys.stdin.read(length)) except ParseException as e: _CGISendFault(FaultFromZSIException(e)) return _Dispatch(ps, modules, _CGISendXML, _CGISendFault, nsdict=nsdict, typesmodule=typesmodule, rpc=rpc)
def do_POST(self): '''The POST command.''' try: # SOAPAction header. action = self.headers.get('soapaction', None) if not action: self.send_fault( Fault(Fault.Client, 'SOAPAction HTTP header missing.')) return if action != Operation.SOAPAction: self.send_fault(Fault(Fault.Client, 'SOAPAction is "%s" not "%s"' % \ (action, Operation.SOAPAction))) return # Parse the message. ct = self.headers['content-type'] if ct.startswith('multipart/'): cid = resolvers.MIMEResolver(ct, self.rfile) xml = cid.GetSOAPPart() ps = ParsedSoap(xml, resolver=cid.Resolve) else: cl = int(self.headers['content-length']) IN = self.rfile.read(cl) self.trace(IN, 'RECEIVED') ps = ParsedSoap(IN) except ParseException, e: self.send_fault(FaultFromZSIException(e)) return
def checkt6(self): try: istr = StringIO.StringIO(intext) m = mimetools.Message(istr) cid = resolvers.MIMEResolver(m['content-type'], istr) xml = cid.GetSOAPPart() ps = ParsedSoap(xml, resolver=cid.Resolve) except ParseException, e: print >> OUT, FaultFromZSIException(e).AsSOAP() self.fail()
def checkt5(self): istr = StringIO.StringIO(intext) m = mimetools.Message(istr) if m.gettype()[0:10] == "multipart/": cid = resolvers.MIMEResolver(m['content-type'], istr) xml = cid.GetSOAPPart() print 'xml=', xml.getvalue() for h, b in cid.parts: print h, b.read() dom = PyExpat.Reader().fromStream(xml) print dom
def do_POST(self): '''The POST command. This is called by HTTPServer, not twisted. action -- SOAPAction(HTTP header) or wsa:Action(SOAP:Header) ''' global _contexts soapAction = self.headers.getheader('SOAPAction') post = self.path if not post: raise PostNotSpecified('HTTP POST not specified in request') if soapAction: soapAction = soapAction.strip('\'"') post = post.strip('\'"') try: ct = self.headers['content-type'] if ct.startswith('multipart/'): cid = resolvers.MIMEResolver(ct, self.rfile) xml = cid.GetSOAPPart() ps = ParsedSoap(xml, resolver=cid.Resolve, readerclass=DomletteReader) else: length = int(self.headers['content-length']) ps = ParsedSoap(self.rfile.read(length), readerclass=DomletteReader) except ParseException as e: self.send_fault(FaultFromZSIException(e)) except Exception as e: # Faulted while processing; assume it's in the header. self.send_fault(FaultFromException(e, 1, sys.exc_info()[2])) else: # Keep track of calls thread_id = _thread.get_ident() _contexts[thread_id] = SOAPContext(self.server, xml, ps, self.connection, self.headers, soapAction) try: _Dispatch(ps, self.server, self.send_xml, self.send_fault, post=post, action=soapAction) except Exception as e: self.send_fault(FaultFromException(e, 0, sys.exc_info()[2])) # Clean up after the call if thread_id in _contexts: del _contexts[thread_id]
def do_POST(self): '''The POST command. ''' try: ct = self.headers['content-type'] if ct.startswith('multipart/'): cid = resolvers.MIMEResolver(ct, self.rfile) xml = cid.GetSOAPPart() ps = ParsedSoap(xml, resolver=cid.Resolve) else: length = int(self.headers['content-length']) ps = ParsedSoap(self.rfile.read(length)) except ParseException, e: self.send_fault(FaultFromZSIException(e)) return
def AsJonPy(request=None, modules=None, **kw): '''Dispatch within a jonpy CGI/FastCGI script. ''' kw['request'] = request if request.environ.get('REQUEST_METHOD') != 'POST': _JonPySendFault(Fault(Fault.Client, 'Must use POST'), **kw) return ct = request.environ['CONTENT_TYPE'] try: if ct.startswith('multipart/'): cid = resolvers.MIMEResolver(ct, request.stdin) xml = cid.GetSOAPPart() ps = ParsedSoap(xml, resolver=cid.Resolve) else: length = int(request.environ['CONTENT_LENGTH']) ps = ParsedSoap(request.stdin.read(length)) except ParseException, e: _JonPySendFault(FaultFromZSIException(e), **kw) return
def do_POST(self): '''The POST command. action -- SOAPAction(HTTP header) or wsa:Action(SOAP:Header) ''' self._fix_chunked_encoding() logger.debug("Request Host: {}".format(self.client_address)) logger.debug("Request URI: {}".format(self.requestline)) for key, value in self.headers.items(): logger.debug("Request Header: {}: {}".format(key, value)) content_type = self.headers.get("content-type", '') action_matchobj = re.search("action=\"(urn:\w+)\"", content_type) if action_matchobj is not None: # SOAP 1.2 soapAction = action_matchobj.group(1) else: # SOAP 1.1 soapAction = self.headers.getheader('SOAPAction') if soapAction: soapAction = soapAction.strip('\'"') self._soapAction = soapAction post = self.path if not post: raise PostNotSpecified, 'HTTP POST not specified in request' post = post.strip('\'"') try: ct = self.headers['content-type'] if ct.startswith('multipart/'): cid = resolvers.MIMEResolver(ct, self.rfile) xml = cid.GetSOAPPart() ps = ParsedSoap(xml, resolver=cid.Resolve) else: length = int(self.headers['content-length']) xml = self.rfile.read(length) logger.debug("Request Body: {}".format(xml)) ps = ParsedSoap(xml) except ParseException, e: self.send_fault(FaultFromZSIException(e))
def checkt6(self): try: istr = io.StringIO(intext) m = mimetools.Message(istr) cid = resolvers.MIMEResolver(m['content-type'], istr) xml = cid.GetSOAPPart() ps = ParsedSoap(xml, resolver=cid.Resolve) except ParseException as e: print(FaultFromZSIException(e).AsSOAP(), file=OUT) self.fail() except Exception as e: # Faulted while processing; assume it's in the header. print(FaultFromException(e, 1, sys.exc_info()[2]).AsSOAP(), file=OUT) self.fail() try: dict = ps.Parse(typecode) except Exception as e: # Faulted while processing; now it's the body print(FaultFromException(e, 0, sys.exc_info()[2]).AsSOAP(), file=OUT) self.fail() self.assertEqual(dict['stringtest'], strExtTest, "Failed to extract stringtest correctly") print(base64.encodestring(cid['*****@*****.**'].read())) v = dict['b64'] print(type(v), 'is type(v)') self.assertEqual(cid['*****@*****.**'].getvalue(), v, "mismatch") print(base64.encodestring(v)) from ZSI.wstools.c14n import Canonicalize z = dict['xmltest'] print(type(z), z) print(Canonicalize(z))
def do_POST(self): '''The POST command.''' try: # SOAPAction header. action = self.headers.get('soapaction', None) if not action: self.send_fault( Fault(Fault.Client, 'SOAPAction HTTP header missing.')) return if action != Operation.SOAPAction: self.send_fault(Fault(Fault.Client, 'SOAPAction is "%s" not "%s"' % \ (action, Operation.SOAPAction))) return # Parse the message. ct = self.headers['content-type'] if ct.startswith('multipart/'): cid = resolvers.MIMEResolver(ct, self.rfile) xml = cid.GetSOAPPart() ps = ParsedSoap(xml, resolver=cid.Resolve) else: cl = int(self.headers['content-length']) IN = self.rfile.read(cl) self.trace(IN, 'RECEIVED') ps = ParsedSoap(IN) except ParseException as e: self.send_fault(FaultFromZSIException(e)) return except Exception as e: # Faulted while processing; assume it's in the header. self.send_fault(FaultFromException(e, 1, sys.exc_info()[2])) return try: # Actors? a = ps.WhatActorsArePresent() if len(a): self.send_fault(FaultFromActor(a[0])) return # Is the operation defined? root = ps.body_root if root.namespaceURI != Operation.ns: self.send_fault( Fault(Fault.Client, 'Incorrect namespace "%s"' % root.namespaceURI)) return n = root.localName op = Operation.dispatch.get(n, None) if not op: self.send_fault( Fault(Fault.Client, 'Undefined operation "%s"' % n)) return # Scan headers. First, see if we understand all headers with # mustUnderstand set. Then, get the ones intended for us (ignoring # others since step 1 insured they're not mustUnderstand). for mu in ps.WhatMustIUnderstand(): if mu not in op.headers: uri, localname = mu self.send_fault(FaultFromNotUnderstood(uri, localname)) return headers = [ e for e in ps.GetMyHeaderElements() if (e.namespaceURI, e.localName) in op.headers ] nsdict = {'Z': Operation.ns} if headers: nsdict['E'] = Operation.hdr_ns self.process_headers(headers, ps) else: self.headertext = None try: results = op.TCin.parse(ps.body_root, ps) except ParseException as e: self.send_fault(FaultFromZSIException(e)) self.trace(str(results), 'PARSED') if op.convert: results = op.convert(results) if op.nsdict: nsdict.update(op.nsdict) reply = StringIO.StringIO() sw = SoapWriter(reply, nsdict=nsdict, header=self.headertext) sw.serialize(results, op.TCout, name='Z:' + n + 'Response', inline=1) sw.close() self.send_xml(reply.getvalue()) except Exception as e: # Fault while processing; now it's in the body. self.send_fault(FaultFromException(e, 0, sys.exc_info()[2])) return