Как добавить заголовки http в suds 0.3.6?
У меня есть приложение в Python2.5, который отправляет данные через suds 0.3.6.
Проблема в том, что данные содержат не-ascii символы, поэтому мне нужно, чтобы в сообщении мыла присутствовал следующий заголовок:
Content-Type = "text / html; charset =" utf-8 "
и заголовок, который существует в сообщении SOAP, просто:
Content-Type = "текст /html"
Я знаю, что это исправлено в suds 0.4, но для этого требуется Python2.6, и мне НУЖЕН Python2.5, потому что я использую CentOS и ему нужна эта версия. Итак, вопрос:
Как я могу изменить или добавить новые заголовки HTTP в сообщение SOAP?
2 ответа
Когда вы создаете механизм открытия в 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
Методы, которые вы должны переопределить, зависят от того, что вы хотите сделать. Смотрите документацию urllib2 на Python.org
По крайней мере, в suds 0.4 (может быть раньше?) HTTP-заголовки также могут быть переданы в конструктор или через set_options
метод:
client = suds.client.Client(url, headers={'key': 'value'})
client.set_options(headers={'key2': 'value'})