如何在suds 0.3.6中添加http头?

6 投票
2 回答
8984 浏览
提问于 2025-04-15 22:33

我有一个用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 文档。

撰写回答