PHP SoapClient не может работать с https WS - PullRequest
4 голосов
/ 16 сентября 2010

У меня проблема с работой PHP SoapClient с WS (WSDL), который содержит https. моя версия PHP 5.2.5. прежде чем спросить, да, я использую расширения PHP Soap и openSSL.

URL, который я пытаюсь получить: https://id3check.gb.co.uk/gbportalinternational/aspx/id3check_1b.asmx?WSDL

код, который я использую:

$url = "https://id3check.gb.co.uk/gbportalinternational/aspx/id3check_1b.asmx?WSDL";
$options["connection_timeout"] = 25;  
$options["location"] = $url;

$client = new SoapClient($url,$options);

происходит сбой при создании SoapClient, и я получаю следующую ошибку:

Предупреждение: SoapClient :: SoapClient (https://id3check.gb.co.uk/gbportalinternational/aspx/id3check_1b.asmx?WSDL): не удалось открыть поток: попытка подключения не удалась, потому что подключенная сторона не ответила должным образом через некоторое время, или не удалось установить соединение, поскольку подключенный хост не смог ответить . в C: \ MY-DEV-FOLDER \ index.php в строке 42 Предупреждение: SoapClient :: SoapClient (): предупреждение ввода-вывода: не удалось загрузить внешнюю сущность "https://id3check.gb.co.uk/gbportalinternational/aspx/id3check_1b.asmx?WSDL" в C: \ MY-DEV -FOLDER \ index.php в строке 42 выдано исключение - SOAP-ERROR: синтаксический анализ WSDL: невозможно загрузить из 'https://id3check.gb.co.uk/gbportalinternational/aspx/id3check_1b.asmx?WSDL'

Может кто-нибудь сказать мне, в чем проблема?

спасибо

Эрез

Ответы [ 2 ]

11 голосов
/ 21 сентября 2010

Вам понадобится включить OpenSSL в PHP, чтобы иметь возможность получать контент по https.

Раскомментируйте эту строку в php.ini

extension=php_openssl.dll

Найдите раздел openssl в вашем phpinfo ():

OpenSSL support => enabled  
OpenSSL Library Version => OpenSSL 0.9.8k 25 Mar 2009
OpenSSL Header Version => OpenSSL 0.9.8k 25 Mar 2009
2 голосов
/ 16 сентября 2010

Я просто запустил код, который вы дали, и он работал отлично:

<?php
$url = "https://id3check.gb.co.uk/gbportalinternational/aspx/id3check_1b.asmx?WSDL";
$options["connection_timeout"] = 25;
$options["location"] = $url;
$options['trace'] = 1;

$client = new SoapClient($url,$options);

print_r($client->__getFunctions());

приводит к

Array
(
    [0] => ID3CheckInitialise_1bResponse ID3CheckInitialise_1b(ID3CheckInitialise_1b $parameters)
    [1] => ID3AddressLookupInitialise_1bResponse ID3AddressLookupInitialise_1b(ID3AddressLookupInitialise_1b $parameters)
    [2] => ID3Check_1bResponse ID3Check_1b(ID3Check_1b $parameters)
    [3] => AddressLookup_1bResponse AddressLookup_1b(AddressLookup_1b $parameters)
)

Так что, возможно, вам следует проверить, есть ли какие-либо проблемы в сети: Есть либрандмауэр блокирует связь внутри вашего серверного процесса?(Я предполагаю, что это IIS?) Вы также можете проверить safe_mode настройки, хотя я сомневаюсь, что это проблема здесь.

...