Consommer un WS en PHP

Fermé
fred33 - 14 sept. 2011 à 10:19
a.laumiere Messages postés 18 Date d'inscription mardi 7 juin 2011 Statut Membre Dernière intervention 16 septembre 2011 - 15 sept. 2011 à 13:08
Bonjour,

J'ai écrit une page en PHP pour consommer un Web Service .L 'URL du Web Service est bien accessible depuis le poste sur lequel j ' effectue mon développement , de plus depuis le logiciel SoapUI qui permet de tester un Web service ça fonctionne . Pourtant lorsque je teste la page ci-dessous depuis Apache , j 'ai l 'erreur suivante :

wsdl error: Getting http://test-ws.fr/services/AddressWS?wsdl - HTTP ERROR: Couldn't open socket connection to server http://test-ws.fr/services/AddressWS?wsdl, Error (10060): Une tentative de connexion a échoué car le parti connecté n'a pas répondu convenablement au-delà d'une certaine durée ou une connexion établie a échoué car l'hôte de connexion n'a pas répondu.

Après quelques recherches sur le net , il s 'agirait du proxy , j'ai des doutes car l'URL de mon Web Service est acceptée par mon proxy . Est-ce qu'il s'agit d'un problème de port , ...

Merci de votre aide .

Page PHP pour consommer un Web Service

<?
require_once('nusoap/lib/nusoap.php');

$proxyhost = isset($_POST['proxyhost']) ? $_POST['proxyhost'] : '';
$proxyport = isset($_POST['proxyport']) ? $_POST['proxyport'] : '';
$proxyusername = isset($_POST['proxyusername']) ? $_POST['proxyusername'] : '';
$proxypassword = isset($_POST['proxypassword']) ? $_POST['proxypassword'] : '';



$clientService = new nusoap_client('http://test-ws.fr/services/AddressWS?wsdl','wsdl',$proxyhost,$proxyport,$proxyusername,$proxypassword);

/*$clientService = new nusoap_client($wsdl, 'wsdl');*/
$err = $clientService->getError();
if ($err) {
echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
}
$params = Array(
'arg0' => 'test',
'arg1' => 'test',
'arg2' => Array(
'ligne1' => 'testeric',
'ligne2' => '',
'ligne3' => '',
'ligne4' => '',
'ligne5' => '',
'ligne6' => '33 BORDEAUX',
'ligne7' => ''
)
);
$result = $clientService->call('controlWoCaptcha', $params);

// Check for a fault
if ($clientService->fault) {
echo '<h2>Fault</h2><pre>';
print_r($result);
echo '</pre>';
} else {
// Check for errors
$err = $clientService->getError();
if ($err) {
echo '<h2>Error</h2><pre>' . $err . '</pre>';
}
else {
// Display the result
echo '<h2>Result</h2><pre>';
print_r($result);
echo '</pre>';
}
}
echo '<h2>Request</h2><pre>' . htmlspecialchars($clientService->request, ENT_QUOTES) . '</pre>';
echo '<h2>Response</h2><pre>' . htmlspecialchars($clientService->response, ENT_QUOTES) . '</pre>';
echo '<h2>Debug</h2><pre>' . htmlspecialchars($clientService->debug_str, ENT_QUOTES) . '</pre>';
?>
A voir également:

3 réponses

a.laumiere Messages postés 18 Date d'inscription mardi 7 juin 2011 Statut Membre Dernière intervention 16 septembre 2011 3
14 sept. 2011 à 10:51
Bonjour,

Pour info il y avait un bug dans la librairie (https://sourceforge.net/p/nusoap/discussion/193578/thread/5ef4a7d8/
Vérifie que la version de NuSOAP utilisée est la plus récente.
1
Merci pour ta réponse , j 'utilise les versons suivantes :

nusoap-0.9.5

Apache/1.3.33 (Win32) PHP/4.3.11

Est ce que nusoap est compatible avec toutes les versions PHP et apache ?
0
a.laumiere Messages postés 18 Date d'inscription mardi 7 juin 2011 Statut Membre Dernière intervention 16 septembre 2011 3
14 sept. 2011 à 16:06
oups, j'avais pas vu, la version qui corrige ce bug n'est pas encore sortie (v0.9.6).
Tu peux essayer de reprendre la version du CVS qui corrige ce bug ou modifier directement la classe soap_transport_http dans la lib (cf. forum sf).
La solution n'est pas très élégante mais peut résoudre ton problème en attendant la prochaine version.
0
Bonjour Merci pour ta réponse alors j 'ai essayé de corriger cette librairie , comme préconisé dans le forum .

Code d 'origine :

// open socket
if($connection_timeout > 0){
$this->fp = @fsockopen( $host, $this->port, $this->errno, $this->error_str, $connection_timeout); }
else
{ $this->fp = @fsockopen( $host, $this->port, $this->errno, $this->error_str); }


code modifié :

// open socket
if($connection_timeout > 0){
$this->fp = @fsockopen( $host, $port, $this->errno, $this->error_str, $connection_timeout); }
else
{ $this->fp = @fsockopen( $host, $port, $this->errno, $this->error_str); }


Toujours le même problème , je ne sais pas si je vais pouvoir y accéder à mon WS via PHP
0
a.laumiere Messages postés 18 Date d'inscription mardi 7 juin 2011 Statut Membre Dernière intervention 16 septembre 2011 3
15 sept. 2011 à 13:08
Le problème est peut-être de plus bas niveau, es-tu sur des paramètres et aussi que le proxy est accessible depuis le serveur ?
0