2010-05-10 54 views
6

我有一個應用程序在python 2.5通過泡沫0.3.6發送數據。如何在泡沫0.3.6中添加http標題?

的問題是,該數據包含非ASCII字符,所以我需要下面的頭在SOAP消息中存在:

的Content-Type = 「text/html的;字符集=」 UTF-8"

和存在於SOAP消息的標題僅僅是:

的Content-Type = 「text/html的」

我知道,它被固定在泡沫0.4,但它需要Python2.6和我需要Python2.5,因爲我使用CentOS,它需要該版本。所以問題是:

如何更改或添加新的HTTP標頭到SOAP消息?

回答

4

當你在urllib2中創建opener時,你可以使用一些處理器來做你想做的任何事情。例如,如果你想加入肥皂水新的頭,你應該做這樣的事情:

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 

的你必須重寫的方法取決於你想要做什麼。見urllib2的文檔中Python.org

12

至少在泡沫0.4的HTTP標頭也可以給構造器或者通過set_options方法傳遞(也許更早):

client = suds.client.Client(url, headers={'key': 'value'}) 
client.set_options(headers={'key2': 'value'}) 
+0

這個工作,它可能比好定義一個新的處理程序來添加標題 – simao 2012-01-20 15:40:47