6

我在 python 2.5 中有一个应用程序,它通过 suds 0.3.6 发送数据。

问题是数据包含非ASCII字符,所以我需要在soap消息中存在以下标题:

内容类型="文本/html; 字符集="utf-8"

SOAP 消息中存在的标头只是:

内容类型=“文本/html”

我知道它在 suds 0.4 中已修复,但它需要 Python2.6,我需要 Python2.5,因为我使用 CentOS,它需要那个版本。所以问题是:

如何更改或添加新的 HTTP 标头到 SOAP 消息?

4

2 回答 2

13

至少在 suds 0.4(可能更早?)HTTP 标头也可以传递给构造函数或通过set_options方法:

client = suds.client.Client(url, headers={'key': 'value'})
client.set_options(headers={'key2': 'value'})
于 2011-09-28T20:57:22.220 回答
4

当您在 urllib2 中创建开启程序时,您可以使用一些处理程序来做任何您想做的事情。例如,如果你想在 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 文档

于 2010-05-19T09:32:32.517 回答