Мыло, питон, пена - PullRequest
       11

Мыло, питон, пена

6 голосов
/ 10 марта 2010

Посоветуйте пожалуйста библиотеку для работы с мылом в python.
Сейчас я пытаюсь использовать «suds» и не могу понять, как получить заголовки http из ответа сервера
Пример кода:

from suds.client import Client
url = "http://10.1.0.36/money_trans/api3.wsdl"
client = Client(url)
login_res = client.service.Login("login", "password")

переменная "login_res" содержит ответ xml и не содержит заголовков http. Но мне нужно получить идентификатор сессии от них.

Ответы [ 2 ]

4 голосов
/ 12 апреля 2011

Ответ от Ishpeck находится на правильном пути. Я просто хотел добавить кое-что о внутренностях Suds.

Клиент suds - это большой жирный слой абстракции поверх HTTP-открывателя urllib2. HTTP-клиент, cookiejar, заголовки, запросы и ответы хранятся в объекте transport. Проблема заключается в том, что ни одно из этих действий не кэшируется и не хранится внутри транспорта, кроме, возможно, файлов cookie в cookie-банке, и даже отслеживание их иногда может быть проблематичным.

Если вы хотите увидеть, что происходит при отладке, я бы предложил добавить это в ваш код:

import logging
logging.basicConfig(level=logging.INFO)
logging.getLogger('suds.client').setLevel(logging.DEBUG)
logging.getLogger('suds.transport').setLevel(logging.DEBUG)

Suds использует собственный logging модуль , поэтому, включив ведение журнала отладки, вы увидите все выполняемые действия, включая заголовки, переменные, полезные данные, URL-адреса и т. Д. спас меня много раз.

Помимо этого, если вам действительно необходимо окончательно отслеживать состояние ваших заголовков, вам потребуется создать собственный подкласс объекта suds.transport.http.HttpTransport и перегрузить некоторые из поведения по умолчанию, а затем передать его Client конструктор.

Вот очень упрощенный пример:

from suds.transport.http import HttpTransport, Reply, TransportError
from suds.client import Client

class MyTransport(HttpTransport):
    # custom stuff done here

mytransport_instance = MyTransport()
myclient = Client(url, transport=mytransport_instance)
4 голосов
/ 21 марта 2010

Я думаю, вы действительно хотите посмотреть в банке печенья для этого.

client = Client(url)
login_res = client.service.Login("login", "password")
for c in client.options.transport.cookiejar:
   if "sess" in str(c).lower():
      print "Session cookie:", c

Я не уверен. Я все еще NOOB SUDS, сам. Но это то, что говорит мне моя интуиция.

...