-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Peter Bengtsson wrote: > I'm trying to send an XML straight into Zope without specifying it as > a parameter and with a Content-Length. It seems that Zope's mapply > function or whatever it's called digests the raw http body and tries > to turn it into parameters? > > > Here's the code on the Zope server (uploadExpenseXML()): > def uploadExpenseXML(self): > return str(self.REQUEST.form.keys()) > > > Here's the dummy code that sends the XML into my Zope: > > xml_content = open('validxmlfile.xml').read() > http = httplib.HTTP("localhost", 8080) > http.putrequest("POST", "/uploadExpenseXML") > http.putheader("User-Agent", "Simple") > http.putheader("Host", "localhost") > http.putheader("Content-Length", "%d" % len(xml_content)) > http.endheaders() > http.send(xml_content) > reply, message, headers = http.getreply() > print http.getfile().read() > > > The result I get is: > ['<?xml version'] > > If I debug the value of that single REQUEST.form variable, it starts > like this: > '"1.0" encoding="ISO-8859-1" standalone="yes" ?>\n<XMLExpense > Version="1.0"> > > Obviously, one solution would be to ask the XML sending company to not > post it like this but instead post it by parameter which I know will > work. > But, what if I can't change their minds? > > > > PS. When faced with the same problem a long time ago I ended up > writing a mod_python app running one a different port that converted > the http post from mod_python into a parameter based http post. I > don't want to have to do that again.
Stock Zope can only handle POST request with XML payloads if they conform to the XMLRPC spec: they must have the 'Content-type' header of 'text/xml', and the document must be encoded as an xmlrpc request. If you can get the vendor to use a PUT request instead of a POST, you could process the result inside a custom object'c 'PUT' method. Otherwise, you are going to need to create a custom derivative of ZPublisher.HTTPRequest, and override its 'processInputs' to handle the vendor's non-standard dump. You could make that server listen on a different port, for instance (I'm guessing you can tell them what URL to POST to, right?) Tres. - -- =================================================================== Tres Seaver +1 202-558-7113 [EMAIL PROTECTED] Palladion Software "Excellence by Design" http://palladion.com -----BEGIN PGP SIGNATURE----- Version: GnuPG v188.8.131.52 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFFLRMX+gerLs4ltQ4RAuLVAJ9YJUQBTQzWxwEFlC5Wq/3OhUAVqACfUslN YgO7r1gy0aepLprIi0S8LNo= =ZHoA -----END PGP SIGNATURE----- _______________________________________________ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )