Soluzione alternativa per errore della richiesta SOAP PHP quando wsdl definisce l'associazione della porta di servizio come https e porta 80?

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

Domanda

Sto consumando un servizio web SOAP usando l'estensione soap di php5. Il servizio 'wsdl è stato generato utilizzando Axis java2wsdl e qualsiasi opzione venga utilizzata durante la generazione risulta che l'URL di associazione delle porte sia elencato come https : //xxx.xxx.xxx.xxx**: 80 **

Se scarico wsdl sul mio server, rimuovo la specifica della porta 80 dal valore della posizione di associazione della porta e faccio riferimento al file locale nella mia chiamata soapclient che funziona correttamente.

Tuttavia, se provo a fare riferimento a remoto (o a scaricarlo e fare riferimento localmente, così com'è) la chiamata non riesce con un errore soap.

Non ho input nel servizio, quindi non posso farli cambiare il loro processo di generazione wsdl. Quindi, a meno che non ci sia un modo per far ignorare il portentoso sapone della porta, sono bloccato con l'uso di una copia modificata localmente della wsdl di qualcun altro (cosa che preferirei non fare).

Qualche idea su come fare in modo che il mio soapclient ignori la porta 80?

È stato utile?

Soluzione

Potresti provare a sovrascrivere il nome host / porta usando l'array $ options che puoi passare come secondo argomento al costruttore di SoapClient:

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

Altri suggerimenti

Se non riesci a trovare una soluzione più elegante, puoi sempre scaricare il file, eseguire le sostituzioni di stringhe, quindi utilizzarlo come 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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top