Solução para a falha de solicitação PHP SOAP quando a ligação da porta de serviço define WSDL como https ea porta 80?

StackOverflow https://stackoverflow.com/questions/1439615

Pergunta

Eu estou consumindo um serviço web SOAP usando extensão sabão do PHP5. O wsdl de serviço' foi gerado utilizando java2wsdl Axis, e tudo o que opções são usadas durante resultado geração na url ligação porta que está sendo listado como https : //xxx.xxx.xxx.xxx**: 80 **

Se eu baixar o wsdl para o meu servidor, remova a especificação da porta 80 da ligação valor localização da porta, e referenciar o arquivo local em minha chamada soapclient ele funciona bem.

No entanto, se eu tentar referenciá-lo remotamente (ou baixá-lo e referenciá-lo localmente, como está) a chamada falha com uma falha de sabão.

Eu não tenho nenhuma entrada no lado do serviço, então não posso fazê-los mudar seu processo de wsdl-geração. Então, a menos que haja uma maneira de fazer os ignorantes soapclient do porto, eu estou preso com o uso de uma cópia modificada localmente de outra pessoa' wsdl (que eu prefiro não fazer).

Quaisquer pensamentos sobre como fazer o meu soapclient ignorar a porta 80?

Foi útil?

Solução

Você pode querer tentar substituir o nome do host / porta usando o array $ opções que você pode passar como o segundo argumento para o construtor de SoapClient:

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

Outras dicas

Se você não consegue encontrar uma solução mais elegante, você sempre pode baixar o arquivo, fazer as substituições de corda, em seguida, usar isso como a 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);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top