@@ -74,13 +74,21 @@ public function doRequest($request, $location, $action, $version, $one_way = 0,
$vcrRequest = new Request('POST', $location);
$encoding = 'utf-8';
if (array_key_exists('encoding', $options)) {
$encoding = $options['encoding'];
}
if ($version === SOAP_1_1) {
$vcrRequest->setHeader('Content-Type', 'text/xml; charset=utf-8;');
$vcrRequest->setHeader(
'Content-Type',
sprintf('text/xml; charset=%s;', $encoding)
);
$vcrRequest->setHeader('SOAPAction', $action);
} else { // >= SOAP_1_2
$vcrRequest->setHeader(
'Content-Type',
sprintf('application/soap+xml; charset=utf-8; action="%s"', $action)
sprintf('application/soap+xml; charset=%s; action="%s"', $encoding, $action)
);
}
I need to change the content type from "text/xml; charset=utf-8" to "application/soap+xml; charset=utf-8".
I'm sending a request from PHP to another server (Oracle server) using SoapClient class that exist by default in PHP. I'm using PHP v7.0.10.
As per SoapClient documentation I should just set the soap_version inside the options array to SOAP_1_2 and it will change the content type but it doesn't do that.
SOAP Request
<soap:Envelope xmlns:soap="//www.w3.org/2003/05/soap-envelope" xmlns:pub="//xmlns.oracle.com/oxp/service/PublicReportService"> <soap:Header/> <soap:Body> <pub:runReport> <pub:reportRequest> <pub:reportAbsolutePath>/Human Capital Management/Workforce Management/Human Resources Dashboard/Fusion User Information.xdo</pub:reportAbsolutePath> <pub:sizeOfDataChunkDownload>-1</pub:sizeOfDataChunkDownload> </pub:reportRequest> </pub:runReport> </soap:Body> </soap:Envelope>PHP Code
Last request header shows
POST /xmlpserver/services/ExternalReportWSSService?WSDL HTTP/1.1 Host: example.com Connection: Keep-Alive User-Agent: PHP-SOAP/7.0.10 Content-Type: text/xml; charset=utf-8 SOAPAction: "" Content-Length: 510 Authorization: Basic ---I've tried to set the content type by so many ways and every one of them failed
Update & Solution
<?php $soap_request = <<<XML <soap:Envelope xmlns:soap="//www.w3.org/2003/05/soap-envelope" xmlns:pub="//xmlns.oracle.com/oxp/service/PublicReportService"> <soap:Header/> <soap:Body> <pub:runReport> <pub:reportRequest> <pub:reportAbsolutePath>/Human Capital Management/Workforce Management/Human Resources Dashboard/Fusion User Information.xdo</pub:reportAbsolutePath> <pub:sizeOfDataChunkDownload>-1</pub:sizeOfDataChunkDownload> </pub:reportRequest> </pub:runReport> </soap:Body> </soap:Envelope> XML; $WSDL = "//example.com/xmlpserver/services/ExternalReportWSSService?WSDL"; $user = "---"; $password = "---"; $ch = curl_init(); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_URL, $WSDL); curl_setopt($ch, CURLOPT_FAILONERROR, true); curl_setopt($ch, CURLOPT_HTTPHEADER, Array( 'Content-Type: application/soap+xml; charset=utf-8', 'SOAPAction: "run"', 'Accept: text/xml', 'Cache-Control: no-cache', 'Pragma: no-cache', 'Content-length: '. strlen($soap_request), 'User-Agent: PHP-SOAP/7.0.10' )); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_USERPWD, $user.":".$password); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_POSTFIELDS, $soap_request); $response = curl_exec($ch); if (empty($response)) { throw new SoapFault('CURL error: '.curl_error($ch), curl_errno($ch)); } curl_close($ch); var_dump($response); ?>