2010-04-02 3 views

답변

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을 사용하고 XML을 모방.

3

예는 SOAP 방법은 SOAP 인코딩 규칙을 준수하는 HTTP 요청/응답입니다 http://www.w3schools.com/SOAP/soap_httpbinding.asp

참조하십시오.

HTTP + XML = SOAP

SOAP 요청은 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))