/ / Solution de contournement pour un échec de demande SOAP PHP lorsque wsdl définit la liaison de port de service comme https et le port 80? - php, soap, wsdl, port, soap-client

Solution de contournement pour l'échec de la requête SOAP PHP lorsque wsdl définit la liaison du port de service comme https et port 80? - php, soap, wsdl, port, client-soap

Je consomme un service Web SOAP utilisant php5 "sextension de savon. Le service "wsdl a été généré à l'aide d'Axis java2wsdl, et quelles que soient les options utilisées lors de la génération, l'URL de liaison de port est répertoriée comme suit: https: //xxx.xxx.xxx.xxx**: 80 **

Si je télécharge le fichier wsdl sur mon serveur, supprime la spécification du port 80 de la valeur d'emplacement de liaison de port et fait référence au fichier local dans mon appel à soapclient.

Cependant, si j'essaie de le référencer à distance (ou de le télécharger et de le référencer localement, tel quel), l'appel échoue avec une faute soap.

Je n'ai aucune entrée dans le service, je ne peux donc pasfaites-les changer leur processus de génération wsdl. Donc, à moins qu’il n’y ait un moyen de faire en sorte que le client ignorant le port, je reste coincé avec une copie localement modifiée de quelqu'un d'autre "wsdl (ce que je préférerais ne pas faire).

Des idées sur la façon de faire ignorer le port 80 par mon soapclient?

Réponses:

2 pour la réponse № 1

Vous voudrez peut-être essayer de remplacer le nom d’hôte / port à l’aide du tableau $ options que vous pourrez transmettre comme deuxième argument du constructeur de SoapClient:

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


2 pour la réponse № 2

Si vous ne pouvez pas "trouver une solution plus élégante, vous pouvez toujours télécharger le fichier, faire les remplacements de chaînes, puis l’utiliser comme 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);