Ich frage mich, ob ich einfach HTTP POST Requests verwenden könnte, um eine SOAP-API zu implementieren.Kann ich HTTP-Postanforderungen für SOAP verwenden? - SOAP und Django
Wenn ja, wie sollte ich die Anfragen formatieren und behandeln?
Ich frage mich, ob ich einfach HTTP POST Requests verwenden könnte, um eine SOAP-API zu implementieren.Kann ich HTTP-Postanforderungen für SOAP verwenden? - SOAP und Django
Wenn ja, wie sollte ich die Anfragen formatieren und behandeln?
Ja, ich habe dies in bestimmten Fällen getan, in denen SOAPpy mit einem bestimmten Schema nicht funktioniert hat. Dies sollte Ihnen den Einstieg erleichtern.
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())
Für den Inhalt Zeichenfolge, würde ich SoapUI verwenden, um die Anfragen von Hand zu machen, und dann die XML nachahmen.
Ja, siehe http://www.w3schools.com/SOAP/soap_httpbinding.asp
Eine SOAP-Methode ist eine HTTP Request/Response, die mit die SOAP-Codierung Regeln entspricht.
HTTP + XML = SOAP
Eine SOAP-Anforderung kann eine HTTP-POST oder eine HTTP-GET-Anforderung sein.
Sie werden manchmal andere Transportmechanismen finden, die aus Gründen der Dienstqualität verwendet werden, z. B. mithilfe eines Messaging-Framework.
Ich fand ein gutes Beispiel dafür im simple-salesforce Paket. Der Code ist in login.py
und eingefügt
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))
Broken Link - nur ein Kopf hoch. – alexplanation