2010-04-02 11 views
5

मुझे आश्चर्य है कि क्या मैं SOAP एपीआई को लागू करने के लिए बस HTTP पोस्ट अनुरोधों का उपयोग कर सकता हूं।क्या मैं SOAP के लिए HTTP पोस्ट अनुरोधों का उपयोग कर सकता हूं? - एसओएपी और डीजेगो

यदि ऐसा है तो मैं अनुरोधों को प्रारूपित और कैसे करना चाहिए?

उत्तर

8

हाँ, मैंने कुछ मामलों में ऐसा किया है जहां SOAPpy किसी दिए गए स्कीमा के साथ काम नहीं करता है। इससे आप कार्य शुरू कर पाएंगे।

import httplib 
from xml.dom import minidom 

http.request("POST", "/path/to/my/webservice", body=xml, headers = { 
    "Host": "myservername", 
    "Content-Type": "text/xml; charset=UTF-8", 
    "Content-Length": len(xml) 
}) 

print minidom.parseString(http.getresponse().read()) 

सामग्री स्ट्रिंग के लिए, मैं SoapUI का उपयोग मैन्युअल अनुरोध करने के लिए होगा, और फिर एक्सएमएल की नकल।

3

हाँ, देख http://www.w3schools.com/SOAP/soap_httpbinding.asp

एक सोप विधि एक HTTP अनुरोध/प्रतिक्रिया है कि सोप एन्कोडिंग नियमों का अनुपालन है।

HTTP + एक्सएमएल = सोप

एक सोप अनुरोध एक HTTP POST या एक HTTP GET अनुरोध हो सकता है।

आपको कभी-कभी सेवा कारणों की गुणवत्ता के लिए उपयोग किए जाने वाले अन्य परिवहन तंत्र मिलेंगे, उदाहरण के लिए मैसेजिंग फ्रेमवर्क का उपयोग करना।

+0

टूटा हुआ लिंक - केवल एक सिर ऊपर चिपकाया गया है। – alexplanation

0

मुझे simple-salesforce पैकेज में इसका एक बड़ा उदाहरण मिला। कोड login.py में है और

soap_url = 'https://{domain}.salesforce.com/services/Soap/u/{sf_version}' 
domain = 'test' if sandbox else 'login' 

soap_url = soap_url.format(domain=domain, sf_version=sf_version) 

username = escape(username) 
password = escape(password) 

# Check if token authentication is used 
if 'security_token' in kwargs: 
    security_token = kwargs['security_token'] 

    # Security Token Soap request body 
    login_soap_request_body = """<?xml version="1.0" encoding="utf-8" ?> 
    <env:Envelope 
      xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> 
     <env:Body> 
      <n1:login xmlns:n1="urn:partner.soap.sforce.com"> 
       <n1:username>{username}</n1:username> 
       <n1:password>{password}{token}</n1:password> 
      </n1:login> 
     </env:Body> 
    </env:Envelope>""".format(username=username, password=password, token=security_token) 

# Check if IP Filtering is used in cojuction with organizationId 
elif 'organizationId' in kwargs: 
    organizationId = kwargs['organizationId'] 

    # IP Filtering Login Soap request body 
    login_soap_request_body = """<?xml version="1.0" encoding="utf-8" ?> 
    <soapenv:Envelope 
      xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
      xmlns:urn="urn:partner.soap.sforce.com"> 
     <soapenv:Header> 
      <urn:CallOptions> 
       <urn:client>RestForce</urn:client> 
       <urn:defaultNamespace>sf</urn:defaultNamespace> 
      </urn:CallOptions> 
      <urn:LoginScopeHeader> 
       <urn:organizationId>{organizationId}</urn:organizationId> 
      </urn:LoginScopeHeader> 
     </soapenv:Header> 
     <soapenv:Body> 
      <urn:login> 
       <urn:username>{username}</urn:username> 
       <urn:password>{password}</urn:password> 
      </urn:login> 
     </soapenv:Body> 
    </soapenv:Envelope>""".format(
     username=username, password=password, organizationId=organizationId) 

else: 
    except_code = 'INVALID AUTH' 
    except_msg = 'You must submit either a security token or organizationId for authentication' 
    raise SalesforceAuthenticationFailed(except_code, except_msg) 

login_soap_request_headers = { 
    'content-type': 'text/xml', 
    'charset': 'UTF-8', 
    'SOAPAction': 'login' 
} 
response = requests.post(soap_url, 
         login_soap_request_body, 
         headers=login_soap_request_headers, 
         proxies=kwargs.get('proxies', None)) 
संबंधित मुद्दे