Mit PHP autodiscover Antwort auslesen
Moin zusammen,
ich möchte unter PHP die Antwort eines Exchange Servers in eine Variable abspeichern.
Unter Powershell würde es recht einfach gehen:
Jedoch, wie würde der Code unter PHP aussehen?
mit wget? mit curl?
Vielen Dank in Voraus and keep rockin'
Der Mike
ich möchte unter PHP die Antwort eines Exchange Servers in eine Variable abspeichern.
Unter Powershell würde es recht einfach gehen:
$response = Invoke-WebRequest "https://ex1.meinedomain.de/Autodiscover/Autodiscover.xml" -Method "POST" -Headers $headers -Body $body -Credential $Cred
Jedoch, wie würde der Code unter PHP aussehen?
mit wget? mit curl?
Vielen Dank in Voraus and keep rockin'
Der Mike
Please also mark the comments that contributed to the solution of the article
Content-ID: 4231460013
Url: https://administrator.de/contentid/4231460013
Printed on: October 5, 2024 at 04:10 o'clock
15 Comments
Latest comment
Ups, das hatte ich übersehen...
Wenn es Basic-Auth ist, könnte es reichen, das Inline in der URL mitzugeben, also https://user:pass@ex1...
Wenn es Basic-Auth ist, könnte es reichen, das Inline in der URL mitzugeben, also https://user:pass@ex1...
Servus,
Das Skript geht davon aus das Zertifikat und Common-Name/SANs gültig sind und zur Domain passen. Wenn dass nicht der Fall ist dann müssen zwei Parameter angepasst werden
Dann werden auch nicht passende SSL-Zertifikate akzeptiert.
Bei Bedarf auch die AUTH Methode CURLOPT_HTTPAUTH anpassen (CURLAUTH_BASIC, CURLAUTH_DIGEST, CURLAUTH_GSSNEGOTIATE, CURLAUTH_NTLM, CURLAUTH_ANY, und CURLAUTH_ANYSAFE)
Grüße Uwe
<?php
// uncomment for debugging
// error_reporting(E_ALL);
// ini_set('display_errors','On');
$email = 'user@domain.tlld';
$username = 'DOMAIN\user';
$password = 'Passw0rd';
$domain = 'domain.tld';
$body = <<<EOF
<?xml version="1.0" encoding="utf-8" ?>
<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/requestschema/2006">
<Request>
<EMailAddress>$email</EMailAddress>
<AcceptableResponseSchema>http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a</AcceptableResponseSchema>
</Request>
</Autodiscover>
EOF;
$ch = curl_init("https://$domain/Autodiscover/Autodiscover.xml");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS,$body);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERNAME, $username);
curl_setopt($ch, CURLOPT_PASSWORD, $password);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml',"X-User-Identity: $email","X-AnchorMailbox: $email"));
if ( !($result = curl_exec($ch)) ) {
echo "CURL REQUEST ERROR (" . curl_getinfo($ch,CURLINFO_RESPONSE_CODE ) .') : ' . curl_error($ch);
curl_close($ch);
exit;
}
curl_close($ch);
$xml = new SimpleXMLElement($result);
var_dump($xml);
?>
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
Bei Bedarf auch die AUTH Methode CURLOPT_HTTPAUTH anpassen (CURLAUTH_BASIC, CURLAUTH_DIGEST, CURLAUTH_GSSNEGOTIATE, CURLAUTH_NTLM, CURLAUTH_ANY, und CURLAUTH_ANYSAFE)
Grüße Uwe
Klappt hier im Test einwandfrei. Hast du mal das Error-Reporting im Skript oben aktiviert? Deine PHP-Umgebung scheint wohl noch nicht vollständig zu sein. PHP Version? Webserver? Was steht im Journal des Webservers zum 500er Error?
Siehe die ergänzenden Hinweise zu Zertifikaten und HTTPAUTH Methode oben.
Siehe die ergänzenden Hinweise zu Zertifikaten und HTTPAUTH Methode oben.
Habe das ganze mal in einer aktuellen FreeBSD 13.1 VM ausprobiert, läuft dort nach meinem Test wie erwartet auch problemlos in folgender Umgebung.
Nur zur Info, für den PHP 7.4 Port wir der Support im November eingestellt.
Versions
# uname -a
FreeBSD freebsd 13.1-RELEASE FreeBSD 13.1-RELEASE releng/13.1-n250148-fc952ac2212 GENERIC amd64
# httpd -v
Server version: Apache/2.4.54 (FreeBSD)
Server built: unknown
Modules
# php -m
[PHP Modules]
Core
curl
date
hash
libxml
mysqli
mysqlnd
pcre
Reflection
SimpleXML
SPL
standard
xml
Installierte Pakete
# pkg info
apache24-2.4.54 Version 2.4.x of Apache web server
apr-1.7.0.1.6.1_2 Apache Portability Library
bash-5.2_3 GNU Project's Bourne Again SHell
ca_root_nss-3.83 Root certificate bundle from the Mozilla Project
curl-7.85.0 Command line tool and library for transferring data with URLs
db5-5.3.28_8 Oracle Berkeley DB, revision 5.3
expat-2.4.9 XML 1.0 parser written in C
gdbm-1.23 GNU database manager
gettext-runtime-0.21 GNU gettext runtime libraries and programs
indexinfo-0.3.1 Utility to regenerate the GNU info page index
jansson-2.14 C library for encoding, decoding, and manipulating JSON data
libargon2-20190702 Memory hard password hashing program and library
libidn2-2.3.3 Implementation of IDNA2008 internationalized domain names
libnghttp2-1.48.0 HTTP/2.0 C Library
libpsl-0.21.1_4 C library to handle the Public Suffix List
libssh2-1.10.0,3 Library implementing the SSH2 protocol
libunistring-1.0 Unicode string library
libxml2-2.10.2 XML parser library for GNOME
mod_php74-7.4.32_1 PHP Scripting Language
nano-6.4 Nano's ANOther editor, an enhanced free Pico clone
pcre2-10.40 Perl Compatible Regular Expressions library, version 2
perl5-5.32.1_3 Practical Extraction and Report Language
php74-7.4.32 PHP Scripting Language
php74-curl-7.4.32 The curl shared extension for php
php74-mysqli-7.4.32 The mysqli shared extension for php
php74-simplexml-7.4.32 The simplexml shared extension for php
php74-xml-7.4.32 The xml shared extension for php
pkg-1.18.4 Package manager
readline-8.1.2 Library for editing command lines as they are typed
PHP Info
Nur zur Info, für den PHP 7.4 Port wir der Support im November eingestellt.