SOAP 오류: 프로덕션 서버에서 WSDL 구문 분석
SoapClient를 활용하여 원격 URL에서 WSDL을 구문 분석하려고 하면 SOAP- 프로덕션 서버에서 ERROR가 발생했습니다. 로컬 WAMP 서버가 작업을 성공적으로 처리했지만 프로덕션 서버에서 문제가 지속되었습니다.
오류 메시지
수신된 특정 오류 메시지는 다음과 같습니다.
SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl' : failed to load external entity "http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl"/taxation_customs/vies/checkVatService.wsdl"
조사
추가 조사 결과 발견됨 URL에서 WSDL을 로드하려고 할 때 SoapClient가 WSDL을 구문 분석할 수 없기 때문에 오류가 발생했습니다. 명령줄에서 컬을 사용하여 직접 호출을 통해 WSDL에 액세스할 수 있음에도 불구하고 이 문제가 발생했습니다.
솔루션
이 문제는 SoapClient 내에서 사용자 에이전트를 명시적으로 설정하여 해결되었습니다. 컨텍스트 스트림 사용:
$soapClientOptions = array( 'stream_context' => $context, 'cache_wsdl' => WSDL_CACHE_NONE ); $client = new SoapClient($wsdlUrl, $soapClientOptions);
이 접근 방식을 사용하면 필요한 HTTP 사용자 에이전트 정보가 요청에 포함되어 SoapClient를 사용하여 원격 URL에서 WSDL을 성공적으로 구문 분석했습니다.
추가 정보
추가 분석에 따르면 이 문제는 프로덕션 서버의 특정 설정으로 인해 발생할 수도 있는 것으로 나타났습니다. HTTP 사용자 에이전트 문자열이 누락된 IPv6를 통한 HTTP 요청이 오류를 유발한 것으로 보입니다. IPv4를 강제하거나 사용자 에이전트 문자열을 명시적으로 지정함으로써 SOAP 오류 없이 요청이 성공할 수 있었습니다.
위 내용은 SoapClient가 프로덕션 서버에서는 WSDL 구문 분석에 실패했지만 로컬 서버에서는 작동하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!