>  기사  >  백엔드 개발  >  내 SOAP 클라이언트가 WAMP에서 작동하지만 Linux에서 "SOAP-ERROR: WSDL 구문 분석: 다음에서 로드할 수 없음" 메시지와 함께 실패하는 이유는 무엇입니까?

내 SOAP 클라이언트가 WAMP에서 작동하지만 Linux에서 "SOAP-ERROR: WSDL 구문 분석: 다음에서 로드할 수 없음" 메시지와 함께 실패하는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-08 18:45:02687검색

Why Does My SOAP Client Work on WAMP But Fail With

WSDL을 구문 분석할 수 없음: "SOAP-ERROR: WSDL 구문 분석: 에서 로드할 수 없지만 WAMP에서 작동합니다."

이 시나리오에서 개인은 Linux 서버에서 SOAP 클라이언트를 활용하는 동안 문제가 발생했습니다. 코드는 WAMP 서버에서 완벽하게 작동하지만 "SOAP-ERROR: WSDL 구문 분석: 다음에서 로드할 수 없습니다."라는 오류 메시지와 함께 실패합니다.

원인

기본적인 문제는 다음과 같습니다. 지식이 풍부한 응답자가 식별한 것은 특정 PHP 버전에서 HTTP 사용자 에이전트 정보를 전송하지 않는 SoapClient에 있습니다. 이로 인해 원격 웹 서비스가 요청을 거부하게 됩니다.

해결 방법

상황을 바로잡기 위해 응답자는 컨텍스트 스트림을 사용하여 코드 내에서 사용자 에이전트를 명시적으로 설정할 것을 권장합니다.

$opts = array(
    'http' => array(
        'user_agent' => 'PHPSoapClient'
    )
);
$context = stream_context_create($opts);

$wsdlUrl = 'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl';
$soapClientOptions = array(
    'stream_context' => $context,
    'cache_wsdl' => WSDL_CACHE_NONE
);

$client = new SoapClient($wsdlUrl, $soapClientOptions);

추가 통찰

피응답자는 해당 웹 서비스가 특이한 동작을 보이는 것을 추가로 관찰했습니다. 사용자 에이전트 문자열 없이 IPv6를 통해 이루어진 요청은 실패하지만 IPv4 또는 사용자 에이전트 문자열을 사용한 요청은 성공합니다. 이는 웹 서비스 구성에 잠재적인 문제가 있음을 시사합니다.

이를 확인하기 위해 응답자는 사용자 에이전트 문자열이 있을 때와 없을 때 HTTP 요청을 할 때의 동작 차이를 보여줍니다.

curl  -A ''  -6 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl

( 실패)

curl  -A 'cURL User Agent'  -6 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl

(성공)

결국 문제는 이는 IPv6 HTTP 요청, SoapClient의 부적절한 사용자 에이전트 정보, 웹 서비스 자체의 잠재적 결함이 결합되어 발생합니다.

위 내용은 내 SOAP 클라이언트가 WAMP에서 작동하지만 Linux에서 "SOAP-ERROR: WSDL 구문 분석: 다음에서 로드할 수 없음" 메시지와 함께 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.