2010-03-10 19 views
6

Indique a la biblioteca si trabaja con jabón en python.
ahora, estoy tratando de usar "espuma" y no puedo undestand cómo HTTP GET cabeceras de la respuesta del servidor
Código ejemplo:SOAP, Python, espuma

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" variables de respuesta XML contener y imposible contener las cabeceras HTTP . Pero necesito obtener una identificación de sesión de ellos.

+0

¿Usted está pidiendo consejos generales sobre las bibliotecas de Python para el jabón, o está pidiendo ayuda en un aspecto particular de la espuma? Por favor, intente hacer preguntas específicas. –

Respuesta

4

Creo que realmente quieres mirar en el tarro de galletas para eso.

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 

No estoy seguro. Sigo siendo un novato de SUDS, yo mismo. Pero esto es lo que mi instinto me dice.

+0

+1 porque está en el camino correcto, suponiendo que urllib2 (el abridor usado nativamente por Suds) juega bien con las cookies. Si tiene 302 redireccionamientos en la ruta, todas las apuestas están desactivadas porque urllib2 + 302 redirige + cookies = INFIERNO. – jathanism

4

La respuesta de Ishpeck está en el camino correcto. Solo quería agregar algunas cosas sobre los internos de Suds.

El cliente de espuma es una gran capa de abstracción encima de un abridor HTTP urllib2. El cliente HTTP, cookiejar, encabezados, solicitud y respuestas están todos almacenados en el objeto transport. El problema es que ninguna parte de esta actividad se almacena en caché o almacenada dentro del transporte, salvo, tal vez, las cookies dentro de la cookiejar, e incluso el seguimiento de estas puede ser problemático.

Si quieres ver lo que está pasando cuando la depuración, mi sugerencia sería añadir esto a su código:

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

Suds makes use of the native logging module y así girando el registro de depuración, se llega a ver toda la actividad que se realiza debajo, incluidos encabezados, variables, carga, URL, etc. Esto me ha ahorrado toneladas de veces.

Fuera de eso, si realmente se necesita para realizar un seguimiento del estado definitivamente en sus cabeceras, vas a tener que crear una subclase personalizada de un objeto suds.transport.http.HttpTransport y la sobrecarga de algunos de los comportamientos por defecto y luego pasar a que el constructor Client .

Aquí es un super-sobre-simplificado ejemplo:

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) 
Cuestiones relacionadas