add workaround for cli webserver option

This commit is contained in:
Andreas Schamberger 2013-08-23 20:55:26 +02:00
parent 96f8415b92
commit 8d62141a3d
1 changed files with 39 additions and 2 deletions

View File

@ -15,6 +15,7 @@ namespace BeSimple\SoapClient;
use BeSimple\SoapCommon\Helper; use BeSimple\SoapCommon\Helper;
use BeSimple\SoapCommon\Converter\MtomTypeConverter; use BeSimple\SoapCommon\Converter\MtomTypeConverter;
use BeSimple\SoapCommon\Converter\SwaTypeConverter; use BeSimple\SoapCommon\Converter\SwaTypeConverter;
use BeSimple\SoapCommon\SoapMessage;
/** /**
* Extended SoapClient that uses a a cURL wrapper for all underlying HTTP * Extended SoapClient that uses a a cURL wrapper for all underlying HTTP
@ -40,6 +41,15 @@ class SoapClient extends \SoapClient
*/ */
protected $tracingEnabled = false; protected $tracingEnabled = false;
/**
* Work around missing header/php://input access in PHP cli webserver by
* setting headers additionally as GET parameters and SOAP request body
* explicitly as POST variable.
*
* @var boolean
*/
private $cliWebserverWorkaround = false;
/** /**
* cURL instance. * cURL instance.
* *
@ -98,6 +108,10 @@ class SoapClient extends \SoapClient
if (isset($options['soap_version'])) { if (isset($options['soap_version'])) {
$this->soapVersion = $options['soap_version']; $this->soapVersion = $options['soap_version'];
} }
// activate cli webserver workaround
if (isset($options['cli_webserver_workaround'])) {
$this->cliWebserverWorkaround = $options['cli_webserver_workaround'];
}
$this->curl = new Curl($options); $this->curl = new Curl($options);
$wsdlFile = $this->loadWsdl($wsdl, $options); $wsdlFile = $this->loadWsdl($wsdl, $options);
// TODO $wsdlHandler = new WsdlHandler($wsdlFile, $this->soapVersion); // TODO $wsdlHandler = new WsdlHandler($wsdlFile, $this->soapVersion);
@ -128,10 +142,33 @@ class SoapClient extends \SoapClient
'Content-Type:' . $soapRequest->getContentType(), 'Content-Type:' . $soapRequest->getContentType(),
'SOAPAction: "' . $soapRequest->getAction() . '"', 'SOAPAction: "' . $soapRequest->getAction() . '"',
); );
$location = $soapRequest->getLocation();
$content = $soapRequest->getContent();
/*
* Work around missing header/php://input access in PHP cli webserver by
* setting headers additionally as GET parameters and SOAP request body
* explicitly as POST variable
*/
if ($this->cliWebserverWorkaround === true) {
if (strpos($location, '?') === false) {
$location .= '?';
} else {
$location .= '&';
}
$location .= SoapMessage::CONTENT_TYPE_HEADER.'='.urlencode($soapRequest->getContentType());
$location .= '&';
$location .= SoapMessage::SOAP_ACTION_HEADER.'='.urlencode($soapRequest->getAction());
$content = http_build_query(array('request' => $content));
$headers = array();
}
// execute HTTP request with cURL // execute HTTP request with cURL
$responseSuccessfull = $this->curl->exec( $responseSuccessfull = $this->curl->exec(
$soapRequest->getLocation(), $location,
$soapRequest->getContent(), $content,
$headers $headers
); );
// tracing enabled: store last request header and body // tracing enabled: store last request header and body