Обходной путь для сбоя запроса PHP SOAP, когда wsdl определяет привязку порта службы как https и порт 80? - PullRequest
1 голос
/ 17 сентября 2009

Я использую веб-сервис SOAP, используя расширение мыла php5. Служба 'wsdl была сгенерирована с использованием Axis java2wsdl, и любые параметры, использованные во время генерации, приводят к тому, что URL привязки порта будет указан как https : //xxx.xxx.xxx.xxx**: 80 **

Если я загружаю wsdl на свой сервер, удаляю спецификацию порта 80 из значения местоположения привязки порта и ссылаюсь на локальный файл в моем вызове soapclient, он работает нормально.

Однако, если я попытаюсь сослаться на него удаленно (или загрузить его и сослаться на него локально, как есть), вызов завершится неудачно с ошибкой мыла.

У меня нет ввода в сервисную часть, поэтому я не могу заставить их изменить процесс генерации wsdl. Таким образом, если нет способа заставить мыльного клиента игнорировать порт, я застрял с использованием локально модифицированной копии чужого wsdl (что я бы предпочел не делать).

Есть мысли, как заставить мой мыльный клиент игнорировать порт 80?

Ответы [ 2 ]

2 голосов
/ 09 ноября 2009

Если вы не можете найти более элегантное решение, вы всегда можете скачать файл, выполнить замену строки, а затем использовать его в качестве WSDL.

$cached_wsdl_file = './cached_wsdl.xml';
if (filemtime($cached_wsdl_file) > time() - 3600) {
    $wsdl = file_get_contents('http://server/service?wsdl');
    $wsdl = str_replace('server:80', 'server', $wsdl);
    file_put_contents($cached_wsdl_file, $wsdl);
}
$client = new SoapClient($cached_wsdl_file);
2 голосов
/ 17 сентября 2009

Возможно, вы захотите попробовать переопределить имя хоста / порт, используя массив $ options, который вы можете передать в качестве второго аргумента в конструктор SoapClient:

$client = new SoapClient("some.wsdl", array('proxy_host' => "https://example.org", 'proxy_port' => 443);

...