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
Lepaskan: 2024-11-08 06:34:02
asal
839 orang telah melayarinya

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);
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan