L'accès Échange de Services Web avec PHP et cURL
Bonjour,
Je suis actuellement à la rédaction d'un client pour accéder à un serveur Microsoft Exchange et de lire les contacts, les rendez-vous etc. .
Par des jours de recherche j'ai été en mesure de se connecter à l'EWS via PHP Soap client et personnalisé HTTPS gestionnaire de Flux. Cette site m'a beaucoup aidé à ce point.
Tout a bien fonctionné sur mon ordinateur Windows 7 en utilisant XAMPP
Maintenant j'ai téléchargé mon projet Debian 6.0 Squeeze machine de développement qui a exactement la même configuration que ma machine Windows qui concerne le web-serveur, les paramètres de php, mysql. mais il juste ne travail plus
La machine debian peut résoudre et la commande ping sur le serveur exchange sans problèmes
J'ai cloué le réel problème à un point, où cURL n'est pas en mesure de récupérer le fichier WSDL de l'EWS
Il reçoit toujours une réponse vide et un 401 (non autorisé) code d'état
- Je utiliser les informations d'identification sont correctes, les mêmes informations d'identification de travailler sur ma machine windows
J'ai extrait le mauvais morceau de code et essayé de courir, il stand-alone, il ressemble à ceci:
echo "Trying to get https://".$cfg[ 'Exchange.Server' ]."/EWS/Services.wsdl<br>";
$curl = curl_init( 'https://'.$cfg[ 'Exchange.Server' ].'/EWS/Services.wsdl' );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1 );
curl_setopt( $curl, CURLOPT_HTTPAUTH, CURLAUTH_NTLM );
curl_setopt( $curl, CURLOPT_USERPWD, $cfg[ 'Exchange.User' ].':'.$cfg[ 'Exchange.Password' ] );
curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $curl, CURLOPT_SSL_VERIFYHOST, false );
echo '<pre>';
$response = curl_exec( $curl );
$info = curl_getinfo( $curl );
var_dump( $info );
var_dump( $response );
curl_close( $curl );
Le résultat je reçois ici est mentionné 401 code d'état, et une réponse vide
Lorsque j'appelle la même url dans mon navigateur ou avec le même code sur ma machine windows, j'obtiens le fichier WSDL je veux
En fait je ne peux même pas dire si c'est une base linux problème ou si je fais quelque chose de mal à un certain point, j'ai du mal avec ce pour 2 jours maintenant.
Il y a quelqu'un qui peut être en mesure de trouver mon erreur ou me dire pourquoi ça ne fonctionne pas?
Je peut fournir toute autre information nécessaire à la demande
curl
ligne de commande de l'outil? Il peut révéler un grand nombre d'informations.Oui, j'ai essayé la même chose en utilisant l'outil de ligne de commande "curl" à l'aide des paramètres -k (ignorer non valide cert), --ntlm (NTLM auth) et -u pour mes informations d'identification d'utilisateur, j'ai reçu une réponse vide
Activer la sortie, je pense que c'est
-v
, de contre-vérifier les --help
. Il y a quelques autres "débogage" options pour les certs etc. IIRC.Semble être quelque chose avec le NTLM bibliothèque sur votre client....
Je n'utilise pas l'authentification NTLM bibliothèque dans ce cas, le roulage est intégré authentification NTLM -v m'a indiqué une erreur que j'ai faite, qui a été à l'aide de \\ au lieu de \ comme mon domaine séparateur pour le nom d'utilisateur, si, j'obtiens toujours la réponse 401
OriginalL'auteur DarkDevine | 2011-10-05
Vous devez vous connecter pour publier un commentaire.
Si vous initialisez votre client soap correctement, vous devriez être en mesure de préformation de toutes les demandes de cette façon:
De votre code, essayez de commenter la ligne suivante:
Également prendre un coup d'oeil où que ce wrapper travaux sur votre installation:
http://ewswrapper.lafiel.net/
Si elle le fait, jetez un oeil à SAVON classes utilisées, il n' - il utilise php intégré dans la base.
Pourquoi ne pouvez-vous pas stocker des fichier wsdl localement, de toute façon?
Mise à JOUR:
Ok, j'ai joué un peu avec ça dans mon système Debian et cela fonctionne pour moi parfaitement:
retourne
Avez-vous essayé en commentant la ligne avec HTTPAUTH? Bien que, techniquement, NTLM d'authentification est requis par MME Ex, en sautant que dans curl exécution fait le tour. Pour télécharger des fichiers wsdl Ex serveur, j'ai fait une boucle par tous auth types et de voir qui retourne un fichier wsdl et l'utiliser pour se connecter au serveur. Vous serez surpris de voir que les diverses MS Ex serveurs utilisent différents auth types.
J'ai déjà essayé de le commenter, il ne fonctionne pas non plus. J'ai aussi essayé toutes les méthodes d'authentification cURL offre encore, pas de chance non plus. Il travaille toujours avec le même code sur ma machine windows, il est donc probablement pas un serveur, mais un client de problème côté
Voir les mises à jour dans la réponse ci-dessus
J'ai essayé ton code et j'ai essayé votre code avec quelques ajustements ici et là, je reçois le 401. Quand je l'ai mis dans l'authentification NTLM, je obtenir un bon résultat sur ma machine windows, cependant, toujours rien sur ma Debian. Merci pour votre aide par la voie
OriginalL'auteur Maiiku
Votre premier chèque doit pas utiliser des scripts complexes.
Au lieu d'essayer d'ouvrir le WSDL à partir d'une simple fenêtre de navigateur sur la machine Debian comme suit:
https://your.exchange-server.com/EWS/Services.wsdl
Si cela ne fonctionne pas il y a probablement des restrictions d'accès en place qui dépendent de l'IP du client ou d'un client réseau (par exemple, votre ordinateur de développement en cours dans un réseau de confiance, votre Debian n'a pas). Le fait que vous obtenez un 401 ("non autorisée" - demande nécessite une authentification de l'utilisateur) suggère qu'il n'y a pas de problème à communiquer avec le serveur, mais avec authentification.
Une autre case je suggère, c'est que vous avez un oeil dans votre phpinfo() pour vérifier que votre installation de PHP sous Debian est capable de gérer HTTP*S* demandes. Assurez-vous, OpenSSL est installé!
De ce que j'ai trouver sur le web, il pourrait être un problème avec NTML v2 (évidemment acceptées uniquement par les serveurs Exchange) et NTML v1 (offerts par les clients Linux). Il semble y avoir de négociation des problèmes entre les deux mondes, même si ils le soutien v2. Ce n'est pas la réponse à votre question, mais peut-être que des conseils dans la bonne direction pour des tests supplémentaires.
OriginalL'auteur Jpsy
Cet article a permis de me diriger dans la bonne direction. Une chose à garder à l'esprit est que
votre installation de PHP ne peut pas être le partage de votre système de roulage /libcurl de l'installation.
http://blog.ianty.com/ubuntu/exchange-web-services-ews-ntlmv2-and-linux/
OriginalL'auteur Jeffery Bennett