2010-03-10 10 views
6

कृपया पाइथन में साबुन के साथ काम करने के लिए लाइब्रेरी की सलाह दें।
अब, मैं "झाग" का उपयोग करने की कोशिश कर रहा हूँ और मैं सर्वर जबाब से समझने के नहीं कर सकता कैसे प्राप्त http हेडर
कोड उदाहरण:SOAP, पायथन, सूड

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 जवाब और does not शामिल होते हैं http हेडर । लेकिन मुझे उनसे सत्र आईडी प्राप्त करने की आवश्यकता है।

+0

आप साबुन के लिए पायथन पुस्तकालयों पर सामान्य सलाह के लिए पूछ रहे हैं, या आप झाग की एक विशेष पहलू पर मदद के लिए पूछ रहे हैं:

यहाँ एक सुपर अति सरल उदाहरण है? कृपया विशिष्ट प्रश्न पूछने का प्रयास करें। –

उत्तर

4

मुझे लगता है कि आप वास्तव में कुकी जार में देखना चाहते हैं।

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 

मुझे यकीन नहीं है। मैं अभी भी एक एसयूडीएस नोब हूं, खुद। लेकिन यह मेरा आंत मुझे बताता है।

+0

+1 क्योंकि यह सही ट्रैक पर है, यह मानते हुए कि urllib2 (सुड्स द्वारा मूल रूप से उपयोग किया जाने वाला सलामी बल्लेबाज) कुकीज़ के साथ अच्छा खेलता है। यदि आपके पास पथ में कोई 302 रीडायरेक्ट है, तो सभी शर्त बंद हैं क्योंकि urllib2 + 302 रीडायरेक्ट + कुकीज़ = हेल। – jathanism

4

Ishpeck से प्रतिक्रिया सही रास्ते पर है। मैं बस सुड्स आंतरिक के बारे में कुछ चीजें जोड़ना चाहता था।

सूड क्लाइंट urllib2 HTTP सलामी बल्लेबाज के शीर्ष पर एक बड़ी वसा अबास्ट्रक्शन परत है। HTTP क्लाइंट, कुकीजर, हेडर, अनुरोध और प्रतिक्रियाएं transport ऑब्जेक्ट में संग्रहीत हैं। समस्या यह है कि इस गतिविधि में से कोई भी परिवहन के अंदर कैश या संग्रहीत नहीं किया जा सकता है, शायद कुकीज के भीतर कुकीज़, और यहां तक ​​कि इन्हें ट्रैक करना कभी-कभी समस्याग्रस्त हो सकता है।

आप को देखने के लिए क्या जब डिबगिंग हो रहा है चाहते हैं, मेरी सुझाव अपने कोड में जोड़ने के लिए होगा: डीबग लॉगिंग को चालू करके

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 और हां, तो आप गतिविधि के सभी देखने को मिलता है हेडर, चर, पेलोड, यूआरएल इत्यादि सहित नीचे किया जा रहा है। इसने मुझे कई बार बचाया है।

कि के बाहर, यदि आप वास्तव में निश्चित अपने हेडर पर स्थिति को ट्रैक करने की जरूरत है, तो आप एक 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) 
संबंधित मुद्दे