Re: sending a handmade SOAP request
- From: Bernard <bernard.chhun@xxxxxxxxx>
- Date: Thu, 31 Jan 2008 13:00:03 -0800 (PST)
On 31 jan, 15:23, Van Gale <vang...@xxxxxxxxx> wrote:
Yes, it's quite easy to SOAP by hand.
I use Oren Tirosh's ElementBuilder class (on top of lxml instead of
ElementTree) to build the SOAP request and the xpath capabilities in lxml
to pull out the data I need from the response.
http://www.tothink.com/python/ElementBuilder/http://codespeak.net/lxml/
An incomplete example for contructing a request looks something like this:
body = Element('soap:Envelope',
{ 'xmlns:soap': nss['soap']},
Element('soap:Header'), Element('soap:Body',
{ 'xmlns:msgs': nss['msgs'] },
Element('msgs:login',
Element('msgs:passport',
{ 'xmlns:core': nss['core'] },
Element('core:password', password),
Element('core:account', account)))))
I use httplib2 for sending the HTTP requests:
http://code.google.com/p/httplib2/
Incomplete example:
headers['SOAPAction'] = action
headers['Content-length'] = str(len(etree.tostring(body)))
response, content = self._client.request(
self.ns_uri, "POST",
body=etree.tostring(body), headers=self._headers)
if response.status == 500 and not \
(response["content-type"].startswith("text/xml") and \
len(content) > 0):
raise HTTPError(response.status, content)
if response.status not in (200, 500):
raise HTTPError(response.status, content)
doc = etree.parse(StringIO(content))
if response.status == 500:
faultstring = doc.findtext(".//faultstring")
raise HTTPError(response.status, faultstring)
Now it's just a matter of using xpath expressions to dig into the "doc"
structure for the bits you need.
oh my that is quite the handy answer Van Gal! I'll try it out right
now. thanks a bunch man!
.
- References:
- sending a handmade SOAP request
- From: Bernard
- Re: sending a handmade SOAP request
- From: Van Gale
- sending a handmade SOAP request
- Prev by Date: Re: sending a handmade SOAP request
- Next by Date: Naive idiom questions
- Previous by thread: Re: sending a handmade SOAP request
- Next by thread: Re: sending a handmade SOAP request
- Index(es):