이 시나리오에서 개인은 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!