Как добавить заголовки 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'})
Другие вопросы по тегам