如何在suds 0.3.6中添加http头?
我有一个用Python 2.5写的应用程序,它通过suds 0.3.6发送数据。
问题是,这些数据里包含了一些非ASCII字符,所以我需要在SOAP消息里加上这个头信息:
Content-Type="text/html; charset="utf-8"
但是现在SOAP消息里只有这个头信息:
Content-Type="text/html"
我知道在suds 0.4版本里这个问题已经修复了,但它需要Python 2.6,而我必须用Python 2.5,因为我在用CentOS,这个系统需要这个版本。所以我的问题是:
我该如何更改或添加新的HTTP头信息到SOAP消息里呢?
2 个回答
13
在suds 0.4版本(可能更早的版本也可以)中,HTTP头信息可以通过构造函数或者通过set_options
方法传递进去:
client = suds.client.Client(url, headers={'key': 'value'})
client.set_options(headers={'key2': 'value'})
4
当你在 urllib2 中创建 opener 的时候,可以使用一些处理器来实现你想要的功能。例如,如果你想在 suds 中添加一个新的头部信息,你可以这样做:
https = suds.transport.https.HttpTransport()
opener = urllib2.build_opener(HTTPSudsPreprocessor)
https.urlopener = opener
suds.client.Client(URL, transport = https)
这里的 HTTPSudsPreprocessor 是你自己定义的处理器,它应该长这样:
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
你需要重写的方法取决于你想要实现的功能。具体可以查看 Python.org 上的 urllib2 文档。