Client de savon, comment appeler une fonction sur HTTPS avec Authentification HTTP de Base

Ce problème a été de me tuer pour toute la journée.

J'ai un client de service web https://*.asmx?WSDL, avec Authentification HTTP de Base..

Si j'utilise SoapUI pour se connecter au service web, tout fonctionne parfaitement sans erreur que ce soit..

Le problème, c'est quand je passe en PHP...

J'ai réussi à connecter, et je peux obtenir la liste des fonctions à partir du serveur à l'aide de soapclient extension pour php ( je suis à l'aide de PHP 5.3.0 ).

Quand j'essaie d'appeler une fonction à l'aide de la soapclient extension pour PHP, j'obtiens l'erreur suivante:

Fatal error: Uncaught exception de type soapfault: [HTTP] Erreur de Récupérer les en-têtes http dans
C:\www\xpto_Atestes\soapclient.php:26 Stack trace: #0 [interne]: >SoapClient->__doRequest('***...', 'http://****...', 1, 0) #1 >C:\www\xpto_Atestes\soapclient.php(26): SoapClient->__soapCall('login', Array) #2 {principal} >jetés dans C:\www\xpto_Atestes\soapclient.php sur la ligne 26

Plus clair erreur ( quand je fais un print_r de la suite de l'appel):

[faultstring] => Erreur de Récupérer les en-têtes http
[faultcode] => HTTP

Avec les en-têtes suivants envoyé:

POST /*.asmx HTTP/1.1 Host: *.pt Connection: Keep-Alive User-Agent: >PHP-SOAP/5.3.0 Content-Type: text/xml; charset=utf-8 SOAPAction: "http://**/Login" >Content-Length: 264 Authorization: Basic AUTHSECRETPASS

Je suis de l'appeler comme ceci:

$soapParams = array('login' => 'HTTP_LOGIN',
'password' => 'HTTP_PASS',
'authentification' => SOAP_AUTHENTICATION_BASIC,
'trace' => 1,
'exceptions' => 0
);
$client = new SoapClient("https://****.asmx?WSDL", $soapParams);
echo "connexion
";
$params = array('compte' => ", 'numéro de téléphone'=>'NOMBRE', 'password'=>'MOT de passe');
$result = $client->__soapCall("login", $params);

Après un certain temps de googler et essayer de savoir ce que le problème pourrait être, je suis passé à nusoap.. qui à ma misère, il a donné une erreur aussi:

Erreur

Erreur HTTP: socket lecture des en-têtes expiré

Demande

POST /**.asmx HTTP/1.0
Hôte: *.pt
User-Agent: NuSOAP/0.9.5 (1.123)
Content-Type: text/xml; charset=ISO-8859-1
SOAPAction: "http://****/Connexion"
Authorization: Basic AUTHSECRETPASS
Content-Length: 481

NUMBERPASSWORD

Réponse

Je suis de l'appeler comme ceci:

$client = new nusoap_client("https://**.asmx?WSDL", true);
$client->setCredentials('HTTPUSER','HTTPPASS','base');
$params = array(
'compte' => ",
'numéro de téléphone'=>'NOMBRE',
'password'=>'MOT de passe'
);
$result = $client->call('Login', $params);

Avec nusoap j'ai aussi essayé d'activer activer l'extension curl à faire des appels:

$client->setUseCurl(true);

Mais pas de chance, il continua de donner une erreur:

Erreur HTTP: cURL ERREUR: 56: Échec lors de la réception de données de l'hôte
url: http://*********.asmx
content_type:
http_code: 0
header_size: 0
request_size: 750
filetime: -1
ssl_verify_result: 0
redirect_count: 0
durée_totale: 21.015
namelookup_time: 0
connect_time: 0
pretransfer_time: 0
size_upload: 462
size_download: 0
speed_download: 0
speed_upload: 21
download_content_length: -1
upload_content_length: -1
starttransfer_time: 0
redirect_time: 0

Je suis sûr à 100% que rien n'est de mal avec le webservice, si je peux l'appeler à partir d'SoapUI sans aucun problème, je ne vois pas pourquoi je ne peux pas appeler ça de la part de PHP.

J'rallye ne sais pas plus ce que je peux faire.. je pense que j'ai tout essayé...

Edit: j'ai juste essayé un autre Savon Classe pour PHP, Zend..

Le résultat est:

Fatal error: Uncaught exception de type soapfault: [WSDL] SAVON d'ERREUR: Analyse d'un WSDL: impossible de charger à partir de 'https://**.asmx?WSDL' : échec du chargement de l'entité externe "https://*.asmx?WSDL" C:\www\xpto_Atestes\Zend\Soap\Client\Common.php:51 la trace de Pile:
#0 C:\www\xpto_Atestes\Zend\Soap\Client\Common.php(51): SoapClient->SoapClient ("https://**...', Array)
#1 C:\www****_Atestes\Zend\Soap\Client.php(1032): Zend_Soap_Client_Common->__construct(Array, 'https://**...', Array)
#2 C:\www****_Atestes\Zend\Soap\Client.php(1188): Zend_Soap_Client->_initSoapClientObject()
#3 C:\www***_Atestes\Zend\Soap\Client.php(1112): Zend_Soap_Client->getSoapClient() #4 [interne]: Zend_Soap_Client->__call('Login', Array)
#5 C:\www****_Atestes\zend.php(28): Zend_Soap_Client->Login(Array)
#6 {principal} jeté dans

Bonjour Tio j'ai exactement le même problème (essayez avec Zend et NuSoap sans succès), Avez-vous réussi à le faire fonctionner? Merci, Yv.
eh bien, j'ai réussi à résoudre le problème avec NuSoap, le WSDL du service web, nécessaire que les différents champs d'un préfixe, et NuSoap n'ai pas mis.. j'ai donc modifié le code de NuSoap à ajouter le préfixe pour les champs, mais je vous conseille d'utiliser le $client->envoyer méthode, dans lequel vous passez la demande XML en tant que paramètre, de cette façon, vous n'avez pas à changer quoi que ce soit.. si vous avez besoin d'un exemple de dire quelque chose..
Pouvez-vous donner un peu plus de détails de votre solution/contournement s'il vous plaît ? c'est à dire que les Préfixes ?

OriginalL'auteur Tio | 2011-02-10