[Zope] Sending XML straight down to a zope

Peter Bengtsson peter at fry-it.com
Wed Oct 11 07:15:32 EDT 2006


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.



-- 
Peter Bengtsson,
work www.fry-it.com
home www.peterbe.com
hobby www.issuetrackerproduct.com


More information about the Zope mailing list