Rumah >pembangunan bahagian belakang >tutorial php >Mengapa SoapClient saya gagal menghuraikan WSDL pada pelayan pengeluaran tetapi berfungsi pada pelayan tempatan saya?

Mengapa SoapClient saya gagal menghuraikan WSDL pada pelayan pengeluaran tetapi berfungsi pada pelayan tempatan saya?

Barbara Streisand
Barbara Streisandasal
2024-11-09 20:50:02445semak imbas

Why does my SoapClient fail to parse a WSDL on the production server but works on my local server?

Ralat SOAP: Menghuraikan WSDL pada Pelayan Pengeluaran

Apabila cuba menggunakan SoapClient untuk menghuraikan WSDL daripada URL jauh, SOAP- ERROR ditemui pada pelayan pengeluaran. Pelayan WAMP tempatan berjaya mengendalikan operasi, tetapi isu ini berterusan pada pelayan pengeluaran.

Mesej Ralat

Mesej ralat khusus yang diterima ialah:

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"

Penyiasatan

Setelah penyiasatan lanjut, didapati ralat itu berpunca daripada ketidakupayaan SoapClient untuk menghuraikan WSDL semasa cuba memuatkannya daripada URL. Ini berlaku walaupun WSDL boleh diakses melalui panggilan terus menggunakan curl daripada baris arahan.

Penyelesaian

Isu telah diselesaikan dengan menetapkan ejen pengguna secara eksplisit dalam SoapClient menggunakan strim konteks:

$soapClientOptions = array(
    'stream_context' => $context,
    'cache_wsdl' => WSDL_CACHE_NONE
);

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

Pendekatan ini memastikan bahawa maklumat ejen pengguna HTTP yang diperlukan disertakan dalam permintaan, membolehkan SoapClient berjaya menghuraikan WSDL daripada URL jauh.

Cerapan Tambahan

Analisis lanjut mendedahkan bahawa isu itu juga boleh dikaitkan dengan tetapan khusus pada pelayan pengeluaran. Permintaan HTTP melalui IPv6 dengan rentetan ejen pengguna HTTP yang hilang nampaknya mencetuskan ralat. Dengan memaksa IPv4 atau menyatakan rentetan ejen pengguna secara eksplisit, permintaan itu dapat berjaya tanpa menghadapi ralat SOAP.

Atas ialah kandungan terperinci Mengapa SoapClient saya gagal menghuraikan WSDL pada pelayan pengeluaran tetapi berfungsi pada pelayan tempatan saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn