Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/04/2011, 00h47   #1
Invité de passage
 
Inscription : juin 2008
Messages : 6
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 6
Points : 0
Points : 0
Par défaut [Services Web] - Fatal error: Uncaught SoapFault exception: [HTTP] Method Not Allowed

Bonsoir à tous,

Je me retrouve confronter à un problème avec un service web que je dois consommer.

Voici mon bout de code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
ini_set('soap.wsdl_cache_enabled', '0');
ini_set('soap.wsdl_cache_ttl', '0');
 
$wsdl = 'http://***.asmx?WSDL';
$options = array(
    'login' => '***',
    'password' => '***',
    'location' => 'http://***.fr'
);
$client = new SoapClient($wsdl, $options);
 
$request = $client->LoginRequest('***', '***');
Et voici l'erreur qu'il m'affiche :
Code :
1
2
3
4
5
Fatal error: Uncaught SoapFault exception: [HTTP] Method Not Allowed in ... 
Stack trace: #0 [internal function]: SoapClient->__doRequest('<?xml version="...', ...', 1, 0) 
#1 [internal function]: SoapClient->__call('LoginRequest', Array) 
#2 ...client.php(13): SoapClient->LoginRequest('...') 
#3 {main} thrown in ... on line 13
Et enfin, voici un bout du XML du Web service :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
POST /***.asmx HTTP/1.1
Host: ***.fr
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://***/LoginRequest"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <LoginRequest xmlns="http://***.org/">
      <LOGIN_REQUEST xmlns="http://***Login">
        <***_LOGIN xmlns="">string</***_LOGIN>
        <***_MOT_DE_PASSE xmlns="">string</***_MOT_DE_PASSE>
      </LOGIN_REQUEST>
    </LoginRequest>
  </soap:Body>
</soap:Envelope>
Quelqu'un aurait-il une idée sur la raison de cette erreur ?
Je pencherai pour le fait qu'il faille envoyer ma requête en POST et non en HTTP, mais je ne vois pas du tout comment m'y prendre.
Merci d'avance pour vos réponses.
clicngo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 11h06   #2
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Peux-tu essayer :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
<?php
ini_set('soap.wsdl_cache_enabled', '0');
ini_set('soap.wsdl_cache_ttl', '0');
 
$wsdl = 'http://***.asmx?WSDL';
$options = array(
    'login' => '***',
    'password' => '***',
    'location' => 'http://***.fr'
);
$client = new SoapClient($wsdl, $options);
print_r($client->__getFunctions());
On verra si la fonction LoginRequest existe bien et si elle n'est pas privée.
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 11h30   #3
Invité de passage
 
Inscription : juin 2008
Messages : 6
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 6
Points : 0
Points : 0
Bonjour Shikiryu,

Et merci pour ta réponse, j'avais bien testé __getFunctions et __getTypes.
Elles me retournent effectivement la liste des fonctions et des types de paramètres attendus, dont la méthode LoginRequest.

D'où mon incompréhension.
clicngo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 11h48   #4
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Le WSDL est donc bien atteint et il trouve bien les fonctions dedans.

Si je comprend bien le message de retour, l'erreur que vous avez est une erreur HTTP et le libellé "Method Not Allowed" amène à penser à une erreur 405.

Autrement dit un problème d'accès à la ressource au niveau du serveur depuis le WS.
Cela peut provenir de pas mal de choses dont voici une liste non-exhaustive :
  • Chemin vers le fichier gérant la méthode LoginRequest introuvable
  • Chemin vers le fichier gérant la méthode LoginRequest protégé
  • Dossier protégé (SSL) et donc l'accès depuis le WS est refusé

Avez-vous vérifier tout ça ?
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 12h59   #5
Expert Confirmé Sénior
 
Homme Laurent Willems
Expert Stop/Start
Inscription : septembre 2002
Messages : 2 551
Détails du profil
Informations personnelles :
Nom : Homme Laurent Willems
Âge : 33
Localisation : Belgique

Informations professionnelles :
Activité : Expert Stop/Start

Informations forums :
Inscription : septembre 2002
Messages : 2 551
Points : 4 271
Points : 4 271
Hello,

http://www.informit.com/articles/art...69106&seqNum=7


Citation:
405 Method Not Allowed If a Web service receives a SOAP message via any HTTP method other than HTTP POST, the service should return a 405 Method Not Allowed error to the sender.
__________________
Alea Jacta Test!
Mygale1978 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 14h24   #6
Invité de passage
 
Inscription : juin 2008
Messages : 6
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 6
Points : 0
Points : 0
@Shikiryu : je n'héberge pas le WS, je n'ai donc pas pu me renseigner

@Mygale1978 : C'est dans cette direction que je pensais aller, mais je n'ai trouvé aucune info pour transmettre ma requête, spécifiquement, en POST (à part en faisant un formulaire en renseignant "action" ?)...
clicngo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 14h56   #7
Rédacteur
 
Avatar de doctorrock
 
Homme Julien Pauli
Architecte de système d'information
Inscription : mai 2006
Messages : 597
Détails du profil
Informations personnelles :
Nom : Homme Julien Pauli
Âge : 29
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Architecte de système d'information
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : mai 2006
Messages : 597
Points : 5 015
Points : 5 015
POST ne doit pas être accépté sur le serveur de destination.

Que renvoie un OPTIONS ?

(http://julien-pauli.developpez.com/t...=page_3#LIII-B)
__________________
.: Expert contributeur certifié PHP/ZF :.
Mes articles - Twitter - GitHub
doctorrock est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h31.


 
 
 
 
Partenaires

Hébergement Web