2010-05-10 15 views
6

मेरे पास पाइथन 2.5 में एक एप्लिकेशन है जो सुड 0.3.6 के माध्यम से डेटा भेजता है।suds 0.3.6 में http शीर्षलेख जोड़ने के लिए कैसे?

समस्या

कि डेटा गैर- ASCII वर्ण होता है, तो मैं निम्नलिखित हेडर की जरूरत है साबुन संदेश में मौजूद:

सामग्री प्रकार = "text/html; charset =" utf-8 "

और हैडर कि सोप संदेश में मौजूद है बस है:

सामग्री प्रकार = "text/html"

मुझे पता है कि उस में तय हो गई है suds 0.4, लेकिन इसके लिए Python2.6 की आवश्यकता है और मुझे Python2.5 की आवश्यकता है क्योंकि मैं CentOS का उपयोग करता हूं और इसे उस संस्करण की आवश्यकता होती है। तो सवाल यह है:

मैं एसओएपी संदेश में नए HTTP शीर्षलेख कैसे बदल सकता हूं या जोड़ सकता हूं?

उत्तर

4

जब आप urllib2 में सलामी बल्लेबाज बनाते हैं, तो आप कुछ हैंडलर का उपयोग जो कुछ भी करना चाहते हैं, कर सकते हैं। जहां HTTPSudsPreprocessor अपने स्वयं के हैंडलर है

https = suds.transport.https.HttpTransport() 
opener = urllib2.build_opener(HTTPSudsPreprocessor) 
https.urlopener = opener 
suds.client.Client(URL, transport = https) 

, और यह इस तरह दिखना चाहिए: उदाहरण के लिए, आप झाग में एक नया हैडर जोड़ना चाहते हैं, तो आपको कुछ इस तरह करना चाहिए

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 

जिस तरीके को आप ओवरराइड करना चाहते हैं उस पर निर्भर करते हैं कि आप क्या करना चाहते हैं। Python.org

में urllib2 दस्तावेज़ देखें
12

कम से कम झाग 0.4 में HTTP हेडर भी निर्माता के लिए या set_options विधि के माध्यम से पारित किया जा सकता (शायद पहले?):

client = suds.client.Client(url, headers={'key': 'value'}) 
client.set_options(headers={'key2': 'value'}) 
+0

यह काम करता है और यह शायद की तुलना में बेहतर है हेडर जोड़ने के लिए एक नए हैंडलर को परिभाषित करना – simao

संबंधित मुद्दे