2010-03-10 16 views
6

Python'da sabunla çalışmak için kütüphaneye başvurunuz.
Şimdi, "köpük" kullanmaya çalışıyorum ve sunucu yanıttan
Kod örneği nasıl olsun http başlıkları anlamamıza edemez:SOAP, Python, köpükler

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") 

değişkeni "login_res" xml cevabı ve doesnt içerirler içerirler http başlıkları . Ama onlardan oturum kimliği almam gerekiyor.

+0

Eğer SOAP için Python kütüphaneleri ile ilgili genel tavsiyeler soran misin, yoksa köpük belirli bir yönü üzerinde yardım istiyor: İşte

süper-over basitleştirilmiş bir örnektir? Lütfen belirli sorular sormaya çalışın. –

cevap

4

Aslında bunun için Cookie Jar'a bakmak istediğinizi düşünüyorum.

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 

Emin değilim. Ben hala kendim bir SUDS noob'um. Ama bu benim bağırsağımın bana söylediği şey.

+0

+1, çünkü bu doğru yolda, urllib2'nin (Suds tarafından yerel olarak kullanılan açıcı) çerezlerle güzel oynadığı varsayılarak. Yolda herhangi bir 302 yönlendirmesi varsa, tüm bahisler kapalıdır çünkü urllib2 + 302 + çerezleri = HELL yönlendirir. – jathanism

4

Ishpeck yanıtı doğru yolda. Sadece Suds internals hakkında birkaç şey eklemek istedim.

Köpük istemcisi, bir urllib2 HTTP açıcısının üstünde büyük şişman bir soyutlama katmanıdır. HTTP istemcisi, cookiejar, üstbilgiler, istek ve yanıtların tümü transport nesnesinde saklanır. Sorun şu ki, bu aktivitenin hiçbiri, belki de, cookiejar içindeki çerezlerin dışında, nakil içinde saklanamaz veya saklanamaz ve hatta bunların takibi bazen sorunlu olabilir. ne zaman ayıklama neler olup bittiğini görmek istiyorsanız

, benim önerim Kodunuza bu eklemek olacaktır: ayıklama oturum açarak

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 ve böylece etkinliğin tüm görmek için olsun başlıklar, değişkenler, yük, URL'ler vb. dahil olmak üzere altında gerçekleştiriliyor. Bu bana tonlarca kez kurtardı. Eğer gerçekten kesin senin başlıklarını durumunu izlemeniz gerekiyorsa bunun dışında

, bir suds.transport.http.HttpTransport nesnenin özel bir alt sınıfını oluşturmak ve varsayılan davranış bazı aşırı ve sonra Client kurucusuna o geçmesine ihtiyacımız olacak .

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)