7 Commits
v4.2 ... v4.2.4

10 changed files with 35 additions and 64 deletions

View File

@ -62,7 +62,7 @@ class Curl
curl_setopt_array($curlSession, [ curl_setopt_array($curlSession, [
CURLOPT_ENCODING => '', CURLOPT_ENCODING => '',
CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_FAILONERROR => true, CURLOPT_FAILONERROR => false,
CURLOPT_RETURNTRANSFER => true, CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_HEADER => true, CURLOPT_HEADER => true,
@ -147,6 +147,8 @@ class Curl
$headerSize = curl_getinfo($curlSession, CURLINFO_HEADER_SIZE); $headerSize = curl_getinfo($curlSession, CURLINFO_HEADER_SIZE);
$httpResponseCode = curl_getinfo($curlSession, CURLINFO_HTTP_CODE); $httpResponseCode = curl_getinfo($curlSession, CURLINFO_HTTP_CODE);
$httpResponseContentType = curl_getinfo($curlSession, CURLINFO_CONTENT_TYPE);; $httpResponseContentType = curl_getinfo($curlSession, CURLINFO_CONTENT_TYPE);;
$responseBody = substr($executeSoapCallResponse, $headerSize);
$responseHeaders = substr($executeSoapCallResponse, 0, $headerSize);
preg_match('/HTTP\/(1\.[0-1]+) ([0-9]{3}) (.*)/', $executeSoapCallResponse, $httpResponseMessages); preg_match('/HTTP\/(1\.[0-1]+) ([0-9]{3}) (.*)/', $executeSoapCallResponse, $httpResponseMessages);
$httpResponseMessage = trim(array_pop($httpResponseMessages)); $httpResponseMessage = trim(array_pop($httpResponseMessages));
$curlErrorMessage = sprintf( $curlErrorMessage = sprintf(
@ -156,7 +158,7 @@ class Curl
$location $location
); );
if ($executeSoapCallResponse === false) { if (!is_integer($httpResponseCode) || $httpResponseCode >= 400 || $httpResponseCode === 0) {
return new CurlResponse( return new CurlResponse(
$httpRequestHeadersAsString, $httpRequestHeadersAsString,
@ -164,6 +166,8 @@ class Curl
$httpResponseMessage, $httpResponseMessage,
$httpResponseContentType, $httpResponseContentType,
self::CURL_FAILED, self::CURL_FAILED,
$responseHeaders,
$responseBody,
$curlErrorMessage $curlErrorMessage
); );
} }
@ -174,9 +178,8 @@ class Curl
$httpResponseMessage, $httpResponseMessage,
$httpResponseContentType, $httpResponseContentType,
self::CURL_SUCCESS, self::CURL_SUCCESS,
null, $responseHeaders,
substr($executeSoapCallResponse, 0, $headerSize), $responseBody
substr($executeSoapCallResponse, $headerSize)
); );
} }

View File

@ -13,7 +13,7 @@ use Exception;
class CurlOptionsBuilder class CurlOptionsBuilder
{ {
const DEFAULT_MAX_REDIRECTS = 10; const DEFAULT_MAX_REDIRECTS = 10;
const DEFAULT_CONNECTION_TIMEOUT = 10; const DEFAULT_CONNECTION_TIMEOUT = 120;
public static function buildDefault() public static function buildDefault()
{ {

View File

@ -19,9 +19,9 @@ class CurlResponse
$httpResponseStatusMessage, $httpResponseStatusMessage,
$httpResponseContentType, $httpResponseContentType,
$curlStatus, $curlStatus,
$curlErrorMessage = null, $responseHeader,
$responseHeader = null, $responseBody,
$responseBody = null $curlErrorMessage = null
) { ) {
$this->httpRequestHeaders = $httpRequestHeaders; $this->httpRequestHeaders = $httpRequestHeaders;
$this->httpResponseStatusCode = $httpResponseStatusCode; $this->httpResponseStatusCode = $httpResponseStatusCode;
@ -78,21 +78,11 @@ class CurlResponse
return $this->curlErrorMessage; return $this->curlErrorMessage;
} }
public function hasResponseHeader()
{
return $this->responseHeader !== null;
}
public function getResponseHeader() public function getResponseHeader()
{ {
return $this->responseHeader; return $this->responseHeader;
} }
public function hasResponseBody()
{
return $this->responseBody !== null;
}
public function getResponseBody() public function getResponseBody()
{ {
return $this->responseBody; return $this->responseBody;

View File

@ -71,7 +71,7 @@ class MimeFilter implements SoapRequestFilter, SoapResponseFilter
$soapPart = $multiPartMessage->getMainPart(); $soapPart = $multiPartMessage->getMainPart();
$attachments = $multiPartMessage->getAttachments(); $attachments = $multiPartMessage->getAttachments();
$response->setContent($this->sanitizePhpExceptionOnHrefs($soapPart)); $response->setContent($soapPart->getContent());
$response->setContentType($soapPart->getHeader('Content-Type')); $response->setContentType($soapPart->getHeader('Content-Type'));
if (count($attachments) > 0) { if (count($attachments) > 0) {
$response->setAttachments($attachments); $response->setAttachments($attachments);

View File

@ -1,19 +0,0 @@
<?php
namespace BeSimple\SoapClient;
class SoapClientNativeDataTransferObject
{
public $request;
public $location;
public $action;
public $version;
public function __construct($request, $location, $action, $version)
{
$this->request = $request;
$this->location = $location;
$this->action = $action;
$this->version = $version;
}
}

View File

@ -6,10 +6,10 @@ use BeSimple\SoapCommon\SoapResponse as CommonSoapResponse;
class SoapResponse extends CommonSoapResponse class SoapResponse extends CommonSoapResponse
{ {
/** /** @var mixed */
* @var mixed
*/
protected $responseObject; protected $responseObject;
/** @var SoapResponseTracingData */
protected $tracingData;
public function getResponseContent() public function getResponseContent()
{ {
@ -25,4 +25,19 @@ class SoapResponse extends CommonSoapResponse
{ {
$this->responseObject = $responseObject; $this->responseObject = $responseObject;
} }
public function hasTracingData()
{
return $this->tracingData !== null;
}
public function getTracingData()
{
return $this->tracingData;
}
public function setTracingData(SoapResponseTracingData $tracingData)
{
$this->tracingData = $tracingData;
}
} }

View File

@ -75,7 +75,7 @@ class WsdlDownloader
$curlResponse = $curl->executeCurlWithCachedSession($wsdlPath); $curlResponse = $curl->executeCurlWithCachedSession($wsdlPath);
if ($curlResponse->curlStatusSuccess()) { if ($curlResponse->curlStatusSuccess()) {
if (mb_strlen($curlResponse->getResponseBody()) === 0) { if (mb_strlen($curlResponse->getResponseBody()) === 0) {
throw new Exception('Could not write WSDL cache file: curl response empty'); throw new Exception('Could not write WSDL cache file: empty curl response from: '.$wsdlPath);
} }
if ($resolveRemoteIncludes === true) { if ($resolveRemoteIncludes === true) {
$document = $this->getXmlFileDOMDocument($curl, $cacheType, $curlResponse->getResponseBody(), $wsdlPath); $document = $this->getXmlFileDOMDocument($curl, $cacheType, $curlResponse->getResponseBody(), $wsdlPath);

View File

@ -110,7 +110,8 @@ class Parser
} }
if (strpos($currentHeader, ':') !== false) { if (strpos($currentHeader, ':') !== false) {
list($headerName, $headerValue) = explode(':', $currentHeader, 2); list($headerName, $headerValue) = explode(':', $currentHeader, 2);
$headerValue = iconv_mime_decode($headerValue, 0, Part::CHARSET_UTF8); $headerValueWithNoCrAtTheEnd = trim($headerValue);
$headerValue = iconv_mime_decode($headerValueWithNoCrAtTheEnd, 0, Part::CHARSET_UTF8);
$parsedMimeHeaders = ContentTypeParser::parseContentTypeHeader($headerName, $headerValue); $parsedMimeHeaders = ContentTypeParser::parseContentTypeHeader($headerName, $headerValue);
foreach ($parsedMimeHeaders as $parsedMimeHeader) { foreach ($parsedMimeHeaders as $parsedMimeHeader) {
$currentPart->setHeader( $currentPart->setHeader(

View File

@ -13,8 +13,6 @@
namespace BeSimple\SoapCommon; namespace BeSimple\SoapCommon;
use BeSimple\SoapClient\SoapResponseTracingData;
/** /**
* SOAP response message. * SOAP response message.
* *
@ -23,21 +21,4 @@ use BeSimple\SoapClient\SoapResponseTracingData;
*/ */
class SoapResponse extends SoapMessage class SoapResponse extends SoapMessage
{ {
/** @var SoapResponseTracingData */
protected $tracingData;
public function hasTracingData()
{
return $this->tracingData !== null;
}
public function getTracingData()
{
return $this->tracingData;
}
public function setTracingData(SoapResponseTracingData $tracingData)
{
$this->tracingData = $tracingData;
}
} }

View File

@ -38,7 +38,7 @@ class MimeFilter implements SoapRequestFilter, SoapResponseFilter
$soapPart = $multiPartMessage->getMainPart(); $soapPart = $multiPartMessage->getMainPart();
$attachments = $multiPartMessage->getAttachments(); $attachments = $multiPartMessage->getAttachments();
$request->setContent($this->sanitizePhpExceptionOnHrefs($soapPart)); $request->setContent($soapPart->getContent());
$request->setContentType($soapPart->getHeader('Content-Type')); $request->setContentType($soapPart->getHeader('Content-Type'));
if (count($attachments) > 0) { if (count($attachments) > 0) {
$request->setAttachments($attachments); $request->setAttachments($attachments);