Rumah >pembangunan bahagian belakang >tutorial php >Mengapa Klien Soap Saya Gagal Menghuraikan WSDL pada Linux Tetapi Berfungsi pada WAMP?

Mengapa Klien Soap Saya Gagal Menghuraikan WSDL pada Linux Tetapi Berfungsi pada WAMP?

Linda Hamilton
Linda Hamiltonasal
2024-11-08 06:34:02845semak imbas

Why Does My SoapClient Fail to Parse WSDL on Linux But Work on WAMP?

Ralat SOAP: Menghuraikan WSDL: Tidak Dapat Memuatkan daripada URL WSDL

Soalan

Pada pelayan induk Linux, SoapClient tidak dapat menghuraikan WSDL daripada URL yang diberikan, mengakibatkan ralat: "SOAP-ERROR: Parsing WSDL: Tidak dapat memuatkan dari - tetapi berfungsi pada WAMP". Walau bagaimanapun, memanggil URL secara terus atau menggunakan curl daripada baris arahan mengembalikan respons XML yang dijangkakan.

Jawapan

Rentetan Ejen Pengguna Hilang:

Untuk versi PHP tertentu, SoapClient tidak boleh menghantar maklumat ejen pengguna HTTP secara lalai. Ini boleh menyebabkan masalah dengan perkhidmatan web yang digunakan.

Penyelesaian:

Tetapkan ejen pengguna secara eksplisit menggunakan strim konteks:

$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);

Isu Perkhidmatan Web:

Selain itu, didapati bahawa perkhidmatan web dalam soalan mempunyai masalah dengan permintaan IPv6 tanpa rentetan ejen pengguna. Untuk mengesahkan ini, cuba perintah berikut pada hos Linux:

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

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

Permintaan IPv6 tanpa ejen pengguna akan gagal, manakala semua permintaan lain akan berjaya. Ini menunjukkan bahawa hos Linux sedang menyelesaikan domain perkhidmatan web ke alamat IPv6nya dan SoapClient tidak menambah rentetan ejen pengguna secara lalai.

Atas ialah kandungan terperinci Mengapa Klien Soap Saya Gagal Menghuraikan WSDL pada Linux Tetapi Berfungsi pada WAMP?. 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