আমি সম্প্রতি একই সমস্যায় হোঁচট খেয়েছি। এখানে আমার সমাধানের সারাংশ দেওয়া হল:
মৌলিক উপাদান কোড ব্লক প্রয়োজন
আপনার ক্লায়েন্ট অ্যাপ্লিকেশনটির প্রয়োজনীয় বুনিয়াদি কোডগুলি নীচে রয়েছে
- অধিবেশন অনুরোধ বিভাগ: সরবরাহকারীর সাথে একটি সেশনের অনুরোধ করুন
- সেশন প্রমাণীকরণ বিভাগ: সরবরাহকারীর শংসাপত্র সরবরাহ করুন
- ক্লায়েন্ট বিভাগ: ক্লায়েন্ট তৈরি করুন
- সুরক্ষা শিরোনাম বিভাগ: ক্লায়েন্টে ডাব্লুএস-সুরক্ষা শিরোনাম যুক্ত করুন
- গ্রাহক বিভাগ: প্রয়োজনীয় অপারেশন (বা পদ্ধতি) গ্রাহ্য করুন
আপনার কি মডিউল প্রয়োজন?
অনেকে 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- সুরক্ষা শিরোনাম যুক্ত করুন:
...
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)
দয়া করে নোট করুন যে এই পদ্ধতিটি চিত্র 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 ফিরিয়ে দিয়েছে HT এটি 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
},
})