Performing SOAP using cURL

I am trying to execute a SOAP function using cURL (because I am getting an error using SoapClient ().

This is my code (which works halfway)

$credentials = "username:pass"; $url = "https://url/folder/sample.wsdl"; $page = "/folder"; $headers = array( "POST ".$page." HTTP/1.0", "Content-type: text/xml;charset=\"utf-8\"", "Accept: text/xml", "Cache-Control: no-cache", "Pragma: no-cache", "SOAPAction: \"customerSearch\"", "Authorization: Basic " . base64_encode($credentials) ); $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 60); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_USERAGENT, $defined_vars['HTTP_USER_AGENT']); $data = curl_exec($ch); 

The problem is that the SOAP action is not running. And I also need to pass arguments into action. Is it possible?

+3
source share
1 answer

You need to specify the cURL options for the POST and set the request body - if you do not send the body, there is no point in the POST request (and more importantly, this is not SOAP). Building the full header of an HTTP request simply will not reduce it.

 $credentials = "username:pass"; $url = "https://url/folder/sample.wsdl"; $body = ''; /// Your SOAP XML needs to be in this variable $headers = array( 'Content-Type: text/xml; charset="utf-8"', 'Content-Length: '.strlen($body), 'Accept: text/xml', 'Cache-Control: no-cache', 'Pragma: no-cache', 'SOAPAction: "customerSearch"' ); $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 60); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_USERAGENT, $defined_vars['HTTP_USER_AGENT']); // Stuff I have added curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $body); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_USERPWD, $credentials); $data = curl_exec($ch); 
+11
source

Source: https://habr.com/ru/post/1339044/


All Articles