I have an application in python 2.5 which sends data through suds 0.3.6.
The problem is that the data contains non-ascii characters, so I need the following header to exist in the soap message:
Content-Type="text/html; charset="utf-8"
and the header that exists in the SOAP message is just:
Content-Type="text/html"
I know that it is fixed in suds 0.4, but it requires Python2.6 and I NEED Python2.5 because I use CentOS and it needs that version. So the question is:
How could I change or add new HTTP headers to a SOAP message?
At least in suds 0.4 (maybe earlier?) HTTP headers can also be passed in to the constructor or via the set_options
method:
client = suds.client.Client(url, headers={'key': 'value'})
client.set_options(headers={'key2': 'value'})
When you create the opener in urllib2, you can use some handlers to do whatever you want. For example, if you want to add a new header in suds, you should do something like this:
https = suds.transport.https.HttpTransport()
opener = urllib2.build_opener(HTTPSudsPreprocessor)
https.urlopener = opener
suds.client.Client(URL, transport = https)
where HTTPSudsPreprocessor is your own handler, and it should look like this:
class HTTPSudsPreprocessor(urllib2.BaseHandler):
def http_request(self, req):
req.add_header('Content-Type', 'text/xml; charset=utf-8')
return req
https_request = http_request
The methods you have to override depend on what you want to do. See urllib2 documentation in Python.org
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With