如何在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中已修复,但是它需要Python2.6,并且我需要Python2.5,因为我使用的是CentOS,并且需要该版本。所以问题是:

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


问题答案:

在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文档