मैं हाल ही में एक ही समस्या पर ठोकर खाई। यहाँ मेरे समाधान का सारांश है:
बुनियादी घटक कोड ब्लॉक की जरूरत है
आपके क्लाइंट एप्लिकेशन के आवश्यक बुनियादी कोड ब्लॉक निम्नलिखित हैं
- सत्र अनुरोध अनुभाग: प्रदाता के साथ एक सत्र का अनुरोध करें
- प्रमाणीकरण प्रमाणीकरण अनुभाग: प्रदाता को क्रेडेंशियल्स प्रदान करते हैं
- क्लाइंट सेक्शन: क्लाइंट बनाएं
- सुरक्षा हैडर अनुभाग: क्लाइंट के लिए WS-Security Header जोड़ें
- उपभोग अनुभाग: आवश्यकतानुसार उपलब्ध संचालन (या विधियों) का उपभोग करें
आपको किन मॉड्यूल्स की आवश्यकता है?
कई ने सुझाव दिया कि पायथन मॉड्यूल का उपयोग करें जैसे कि urllib2; हालाँकि, कोई भी मॉड्यूल इस विशेष परियोजना के लिए कम से कम काम नहीं करता है।
तो, यहां उन मॉड्यूल की सूची दी गई है जिन्हें आपको प्राप्त करने की आवश्यकता है। सबसे पहले, आपको निम्नलिखित लिंक से सूद के नवीनतम संस्करण को डाउनलोड और इंस्टॉल करना होगा:
pypi.python.org/pypi/suds-jurko/0.4.1.jurko.2
इसके अतिरिक्त, आपको निम्न लिंक से क्रमशः अनुरोधों और suds_requests मॉड्यूल को डाउनलोड और इंस्टॉल करना होगा (अस्वीकरण: मैं यहां पोस्ट करने के लिए नया हूं, इसलिए मैं अभी के लिए एक से अधिक लिंक पोस्ट नहीं कर सकता)।
pypi.python.org/pypi/requests
pypi.python.org/pypi/suds_requests/0.1
एक बार जब आप सफलतापूर्वक इन मॉड्यूल को डाउनलोड और इंस्टॉल कर लेते हैं, तो आप जाने के लिए अच्छे हैं।
कोड
पहले बताए गए चरणों का पालन करते हुए, कोड निम्न की तरह दिखता है: आयात:
import logging
from suds.client import Client
from suds.wsse import *
from datetime import timedelta,date,datetime,tzinfo
import requests
from requests.auth import HTTPBasicAuth
import suds_requests
सत्र अनुरोध और प्रमाणीकरण:
username=input('Username:')
password=input('password:')
session = requests.session()
session.auth=(username, password)
क्लाइंट बनाएँ:
client = Client(WSDL_URL, faults=False, cachingpolicy=1, location=WSDL_URL, transport=suds_requests.RequestsTransport(session))
WS-Security Header जोड़ें:
...
addSecurityHeader(client,username,password)
....
def addSecurityHeader(client,username,password):
security=Security()
userNameToken=UsernameToken(username,password)
timeStampToken=Timestamp(validity=600)
security.tokens.append(userNameToken)
security.tokens.append(timeStampToken)
client.set_options(wsse=security)
कृपया ध्यान दें कि यह विधि Fig.1 में दर्शाया गया सुरक्षा शीर्ष लेख बनाता है। इसलिए, आपका कार्यान्वयन आपके द्वारा उपभोग की जा रही सेवा के स्वामी द्वारा प्रदान किए गए सही सुरक्षा हेडर प्रारूप के आधार पर भिन्न हो सकता है।
प्रासंगिक विधि (या संचालन) का उपभोग करें:
result=client.service.methodName(Inputs)
लॉगिंग :
इस तरह के कार्यान्वयन में सर्वोत्तम प्रथाओं में से एक यह है कि संचार को कैसे निष्पादित किया जाता है यह देखने के लिए लॉगिंग है। यदि कोई समस्या है, तो यह डीबग करना आसान बनाता है। निम्न कोड बेसिक लॉगिंग करता है। हालांकि, आप कोड में दर्शाए गए लोगों के अलावा संचार के कई पहलुओं को लॉग कर सकते हैं।
logging.basicConfig(level=logging.INFO)
logging.getLogger('suds.client').setLevel(logging.DEBUG)
logging.getLogger('suds.transport').setLevel(logging.DEBUG)
परिणाम:
यहाँ मेरे मामले में परिणाम है। ध्यान दें कि सर्वर HTTP 200 लौटा है। यह HTTP अनुरोध-प्रतिक्रिया के लिए मानक सफलता कोड है।
(200, (collectionNodeLmp){
timestamp = 2014-12-03 00:00:00-05:00
nodeLmp[] =
(nodeLmp){
pnodeId = 35010357
name = "YADKIN"
mccValue = -0.19
mlcValue = -0.13
price = 36.46
type = "500 KV"
timestamp = 2014-12-03 01:00:00-05:00
errorCodeId = 0
},
(nodeLmp){
pnodeId = 33138769
name = "ZION 1"
mccValue = -0.18
mlcValue = -1.86
price = 34.75
type = "Aggregate"
timestamp = 2014-12-03 01:00:00-05:00
errorCodeId = 0
},
})