2015-06-18 3 views
1

Всякий раз, когда я бросаю SoapFault в свои PHP-приложения, код состояния HTTP устанавливается в HTTP/1.1 500 Internal Service Error. Это происходит, даже если я установил код состояния на что-то другое, используя http_response_code() или header(), прежде чем бросать SoapFault. Невозможно изменить код состояния при бросании SoapFault? И не следует ли это называть HTTP/1.1 500 Internal Server Error? Я не знал, что HTTP/1.1 500 Internal Service Error даже существовал.Изменение кода состояния HTTP при метании SoapFault

Я использую SoapUI для проверки ответов от моего SoapServer.

Пример бросать SoapFault (внутри функции обрабатываются с помощью SoapServer объекта)

http_response_code(404); 
throw new SoapFault('Client', 'The specified item was not found'); 

Пример ответа:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
    <SOAP-ENV:Body> 
    <SOAP-ENV:Fault> 
     <faultcode>SOAP-ENV:Client</faultcode> 
     <faultstring>The specified item was not found</faultstring> 
    </SOAP-ENV:Fault> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

заголовки Пример ответа:

Date Thu, 18 Jun 2015 12:27:23 GMT 
Content-Length 299 
#status# HTTP/1.1 500 Internal Service Error 
Expires Thu, 19 Nov 1981 08:52:00 GMT 
Set-Cookie PHPSESSID=kqhubpja05jfcluohbgts8lmk6; path=/ 
Connection close 
Content-Type text/xml; charset=utf-8 
Server Apache/2.4.9 (Win64) PHP/5.5.12 
X-Powered-By PHP/5.5.12 
Cache-Control no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma no-cache 

ответ

0

я в конечном итоге написание мой собственный код для вывода ошибки мыла. Затем я могу вернуть любой код состояния HTTP, который я хочу. Я не уверен, что нужно использовать $faultname и $headerfault. Пожалуйста, оставьте комментарий, если у вас есть какие-либо идеи.

function soapFault($faultcode, $faultstring, $faultactor = null, $detail = null, $faultname = null, $headerfault = null) { 
    switch($faultcode) { 
     case 'Client': 
     case 'Server': 
     case 'VersionMismatch': 
     case 'MustUnderstand': 
     $faultcode = 'SOAP-ENV:'.$faultcode; 
    } 

    die(
<<<FAULT 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
    <SOAP-ENV:Body> 
     <SOAP-ENV:Fault> 
     <faultcode>$faultcode</faultcode> 
     <faultstring>$faultstring</faultstring> 
     <faultactor>$faultactor</faultactor> 
     <detail>$detail</detail> 
    </SOAP-ENV:Fault> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 
FAULT 
    ); 
}