Visual FoxPro
Visual FoxPro
HTTP request for a SOAP web service using WS-Security 1.0 with a digital certificate for authentication
See more HTTP Examples
Demonstrates how to build and send an HTTP request for a SOAP web service using WS-Security 1.0 with a digital certificate for authentication.Chilkat Visual FoxPro Downloads
LOCAL lnSuccess
LOCAL loCert
LOCAL loXml
LOCAL loGen
LOCAL loXmlCustomKeyInfo
LOCAL loSbXml
LOCAL loHttp
LOCAL loResp
lnSuccess = 0
* This example assumes the Chilkat API to have been previously unlocked.
* See Global Unlock Sample for sample code.
* See HTTP request for a SOAP web service using WS-Security 1.0 with a digital certificate for authentication
* ------------------------------------
* Step 1: Load the signing certificate
* ------------------------------------
loCert = CreateObject('Chilkat.Cert')
lnSuccess = loCert.LoadFromSmartcard("")
IF (lnSuccess = 0) THEN
? loCert.LastErrorText
RELEASE loCert
CANCEL
ENDIF
* ---------------------------------------
* Step 2: Build the SOAP XML to be signed
* ---------------------------------------
loXml = CreateObject('Chilkat.Xml')
loXml.Tag = "SOAP-ENV:Envelope"
loXml.AddAttribute("xmlns:SOAP-ENV","http://schemas.xmlsoap.org/soap/envelope/")
loXml.AddAttribute("xmlns:web","http://www.example.com/webservice/")
loXml.UpdateAttrAt("SOAP-ENV:Header|wsse:Security",1,"xmlns:ds","http://www.w3.org/2000/09/xmldsig#")
loXml.UpdateAttrAt("SOAP-ENV:Header|wsse:Security",1,"xmlns:wsse","http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd")
loXml.UpdateAttrAt("SOAP-ENV:Header|wsse:Security",1,"xmlns:wsu","http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd")
loXml.UpdateAttrAt("SOAP-ENV:Header|wsse:Security",1,"xmlns:xenc","http://www.w3.org/2001/04/xmlenc#")
loXml.UpdateAttrAt("SOAP-ENV:Header|wsse:Security",1,"SOAP-ENV:mustUnderstand","1")
loXml.UpdateAttrAt("SOAP-ENV:Header|wsse:Security|wsse:BinarySecurityToken",1,"A1","")
loXml.UpdateAttrAt("SOAP-ENV:Header|wsse:Security|wsse:BinarySecurityToken",1,"EncodingType","http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary")
loXml.UpdateAttrAt("SOAP-ENV:Header|wsse:Security|wsse:BinarySecurityToken",1,"ValueType","http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509")
loXml.UpdateAttrAt("SOAP-ENV:Header|wsse:Security|wsse:BinarySecurityToken",1,"wsu:Id","x509cert00")
loXml.UpdateChildContent("SOAP-ENV:Header|wsse:Security|wsse:BinarySecurityToken",loCert.GetEncoded())
loXml.UpdateAttrAt("SOAP-ENV:Body",1,"xmlns:wsu","http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd")
loXml.UpdateAttrAt("SOAP-ENV:Body",1,"wsu:Id","TheBody")
loXml.UpdateChildContent("SOAP-ENV:Body|web:MyRequest|web:Parameter","MyValue")
* ---------------------------------------
* Step 3: Sign the XML
* ---------------------------------------
loGen = CreateObject('Chilkat.XmlDSigGen')
loGen.SigLocation = "SOAP-ENV:Envelope|SOAP-ENV:Header|wsse:Security"
loGen.SigLocationMod = 0
loGen.SigNamespacePrefix = "ds"
loGen.SigNamespaceUri = "http://www.w3.org/2000/09/xmldsig#"
loGen.SignedInfoPrefixList = "ds wsu xenc SOAP-ENV "
loGen.IncNamespacePrefix = "c14n"
loGen.IncNamespaceUri = "http://www.w3.org/2001/10/xml-exc-c14n#"
loGen.SignedInfoCanonAlg = "EXCL_C14N"
loGen.SignedInfoDigestMethod = "sha1"
* -------- Reference 1 --------
loGen.AddSameDocRef("TheBody","sha1","EXCL_C14N","wsu SOAP-ENV","")
loGen.SetX509Cert(loCert,1)
loGen.KeyInfoType = "Custom"
* Create the custom KeyInfo XML..
loXmlCustomKeyInfo = CreateObject('Chilkat.Xml')
loXmlCustomKeyInfo.Tag = "wsse:SecurityTokenReference"
loXmlCustomKeyInfo.Content = "5"
loXmlCustomKeyInfo.UpdateAttrAt("wsse:Reference",1,"URI","#x509cert00")
loXmlCustomKeyInfo.UpdateAttrAt("wsse:Reference",1,"ValueType","http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509")
loXmlCustomKeyInfo.EmitXmlDecl = 0
loGen.CustomKeyInfoXml = loXmlCustomKeyInfo.GetXml()
* Load XML to be signed...
loSbXml = CreateObject('Chilkat.StringBuilder')
loXml.EmitXmlDecl = 0
loXml.GetXmlSb(loSbXml)
loGen.Behaviors = "IndentedSignature"
* Sign the XML...
lnSuccess = loGen.CreateXmlDSigSb(loSbXml)
IF (lnSuccess = 0) THEN
? loGen.LastErrorText
RELEASE loCert
RELEASE loXml
RELEASE loGen
RELEASE loXmlCustomKeyInfo
RELEASE loSbXml
CANCEL
ENDIF
* ---------------------------------------------------------
* Step 4: Send the HTTP POST containing the Signed SOAP XML
* ---------------------------------------------------------
loHttp = CreateObject('Chilkat.Http')
loHttp.SetRequestHeader("SOAPAction",'"http://www.example.com/MyWebService"')
loHttp.SetRequestHeader("Host","www.example.com")
loHttp.SetRequestHeader("Content-Type","text/xml; charset=utf-8")
loResp = CreateObject('Chilkat.HttpResponse')
lnSuccess = loHttp.HttpSb("POST","https://example.com/MyWebService",loSbXml,"utf-8","text/xml; charset=utf-8",loResp)
IF (lnSuccess = 0) THEN
? loHttp.LastErrorText
RELEASE loCert
RELEASE loXml
RELEASE loGen
RELEASE loXmlCustomKeyInfo
RELEASE loSbXml
RELEASE loHttp
RELEASE loResp
CANCEL
ENDIF
? STR(loResp.StatusCode)
? loResp.BodyStr
? "Finished."
RELEASE loCert
RELEASE loXml
RELEASE loGen
RELEASE loXmlCustomKeyInfo
RELEASE loSbXml
RELEASE loHttp
RELEASE loResp