Go Back   HowtoForge Forums | HowtoForge - Linux Howtos and Tutorials > Linux Forums > HOWTO-Related Questions

Do you like HowtoForge? Please consider supporting us by becoming a subscriber.
Thread Tools Display Modes
Prev Previous Post   Next Post Next
Old 10th July 2011, 16:10
lightsabersetc lightsabersetc is offline
Junior Member
Join Date: Jul 2011
Posts: 1
Thanks: 0
Thanked 0 Times in 0 Posts
Question Getting blank response from exchange server (RE:Talking SOAP With Exchange)


I just followed the tutorial at http://www.howtoforge.com/talking-soap-with-exchange. I am getting a successful response from $client->__getFunctions() & $client->__getTypes(), but am receiving a blank response on any call thereafter. Below is my code and some relevant output:

class NTLMSoapClient extends SoapClient {
		function __doRequest($request, $location, $action, $version) {
			$headers = array(
				'Method: POST',
				'Connection: Keep-Alive',
				'User-Agent: PHP-SOAP-CURL',
				'Content-Type: text/xml; charset=utf-8',
				'SOAPAction: "'.$action.'"',
			$this->__last_request_headers = $headers;
			$ch = curl_init($location);
			curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
			curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
			curl_setopt($ch, CURLOPT_POST, true );
			curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
			curl_setopt($ch, CURLOPT_USERPWD, $this->user.':'.$this->password);
			curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
			curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
			$response = curl_exec($ch);
			echo $request . "<BR>" . $response;
			return $response;
		function __getLastRequestHeaders() {
			return implode("n", $this->__last_request_headers)."n";
class ExchangeNTLMSoapClient extends NTLMSoapClient {
		protected $user = 'me@exchange.com';
		protected $password = 'password';
class NTLMStream {
		private $path;
		private $mode;
		private $options;
		private $opened_path;
		private $buffer;
		private $pos;

		public function stream_open($path, $mode, $options, $opened_path) {
			echo "[NTLMStream::stream_open] $path , mode=$mode n";
			$this->path = $path;
			$this->mode = $mode;
			$this->options = $options;
			$this->opened_path = $opened_path;
			return true;

		public function stream_close() {
			echo "[NTLMStream::stream_close] n";

		public function stream_read($count) {
			echo "[NTLMStream::stream_read] $count n";
			if(strlen($this->buffer) == 0) {
				return false;
			$read = substr($this->buffer,$this->pos, $count);
			$this->pos += $count;
			return $read;

		public function stream_write($data) {
			echo "[NTLMStream::stream_write] n";
			if(strlen($this->buffer) == 0) {
				return false;
			return true;

		public function stream_eof() {
			echo "[NTLMStream::stream_eof] ";
			if($this->pos > strlen($this->buffer)) {
				echo "true n";
				return true;
			echo "false n";
			return false;

		/* return the position of the current read pointer */
		public function stream_tell() {
			echo "[NTLMStream::stream_tell] n";
			return $this->pos;

		public function stream_flush() {
			echo "[NTLMStream::stream_flush] n";
			$this->buffer = null;
			$this->pos = null;

		public function stream_stat() {
			echo "[NTLMStream::stream_stat] n";
			$stat = array(
				'size' => strlen($this->buffer),
			return $stat;

		public function url_stat($path, $flags) {
			echo "[NTLMStream::url_stat] n";
			$stat = array(
				'size' => strlen($this->buffer),
			return $stat;

		/* Create the buffer by requesting the url through cURL */
		private function createBuffer($path) {
			if($this->buffer) {
			echo "[NTLMStream::createBuffer] create buffer from : $pathn";
			$this->ch = curl_init($path);
			curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, true);
			curl_setopt($this->ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
			curl_setopt($this->ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM);
			curl_setopt($this->ch, CURLOPT_USERPWD, $this->user.':'.$this->password);
                        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
                        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
			echo $this->buffer = curl_exec($this->ch);
			echo "[NTLMStream::createBuffer] buffer size : ".strlen($this->buffer)."bytesn";
			$this->pos = 0;
class ExchangeNTLMStream extends NTLMStream {
		protected $user = 'me@exchange.com';
		protected $password = 'password';
$wsdl = dirname(__FILE__)."\\Services.wsdl";
    stream_wrapper_register('https', 'ExchangeNTLMStream') or die("Failed to register protocol");
    $client = new ExchangeNTLMSoapClient($wsdl);
    /* Do something with the web service connection */
    $FindFolder->Traversal = "Shallow";
    $FindFolder->FolderShape->BaseShape = "Default";
    $FindFolder->ParentFolderIds->DistinguishedFolderId->Id = "root";
    $result = $client->FindFolder($FindFolder);
    $folders = $result->ResponseMessages->FindFolderResponseMessage->RootFolder->Folders->Folder;
    foreach($folders as $folder) {
            echo $folder->DisplayName."n";
The var_dump of $result returns NULL. I dumped $request and $response in the class NTLMSoapClient, which yielded 'Default' and 'NULL' respectively. I have tried basically every function with the same results. At this point, I've been banging my head against the table for quite a while trying to get this to work so I'm hoping one of you can help

Thanks in advance!
Reply With Quote
Sponsored Links


curl, ews, exchange server, ntlm, php, soap

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
ISPConfig3 mail doesn't work pehden Installation/Configuration 20 9th December 2013 15:05
Can't Ping over VPN RoMiONeT Server Operation 2 4th July 2010 01:19
FTP cannot open remote folder!?! andysm849 Server Operation 23 17th October 2008 00:34
Email - Ueb-Miau mazhar Installation/Configuration 5 21st December 2005 11:01
The Perfect Setup Suse 9.3 - Postfix problems new_bee05 HOWTO-Related Questions 20 25th November 2005 03:30

All times are GMT +2. The time now is 07:32.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2014, vBulletin Solutions, Inc.