----- Original Message -----
From: "Peter Bengtsson" <[EMAIL PROTECTED]>
To: "Tres Seaver" <[EMAIL PROTECTED]>
Sent: Thursday, October 12, 2006 1:09 PM
Subject: Re: [Zope] Re: Sending XML straight down to a zope
Tres Seaver wrote:
-----BEGIN PGP SIGNED MESSAGE-----
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()):
Here's the dummy code that sends the XML into my Zope:
xml_content = open('validxmlfile.xml').read()
http = httplib.HTTP("localhost", 8080)
http.putheader("Content-Length", "%d" % len(xml_content))
reply, message, headers = http.getreply()
The result I get is:
If I debug the value of that single REQUEST.form variable, it starts
'"1.0" encoding="ISO-8859-1" standalone="yes" ?>\n<XMLExpense
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
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?)
Cool. Thanks for the suggestion. I've tried to make them change the way
they post it to me and if that's not possible I'll consider your advice
about either PUT or digging into ZPublisher which I was hoping not to have
As an alternative strategy, how about:
i) set up a url just for this problem user
ii) us apache rewrite to redirect to a non-zope cgi script
iii) use the cgi script to 'fix' the xml
iv) do a redirect with the fixed xml to a 'zope' url
This would allow you to run a standard zope installation (running a hacked
installation is a maintenance nightmare), and if the problem user ever gets
their act together, you just change the apache rewrite rule so that they are
delivered straight to your zope application.
Just a thought...
Zope maillist - Zope@zope.org
** No cross posts or HTML encoding! **
(Related lists -