使用PHP和cURL访问Exchange Web服务

前端之家收集整理的这篇文章主要介绍了使用PHP和cURL访问Exchange Web服务前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
你好,

我目前正在写客户端来访问Microsoft Exchange服务器,并从中读取联系人,约会等.

通过几天的搜索,我已经能够通过PHP的Soap客户端和自定义的HTTPS Stream包装器连接到EWS. This网站在这一点上大大帮助了我.

使用XAMPP在我的Windows 7机器上一切正常

现在我将我的项目上传到Debian 6.0 Squeeze开发机器上,该机器与Windows机器的Web服务器,PHP设置,MysqL设置等完全相同,但是它不再工作了

debian机器可以解决和ping交换服务器没有问题

我将实际问题钉在一个点上,cURL无法检索EWS的WSDL文件

它总是收到一个空的响应和一个401(未经授权的)状态代码

我使用的凭据是正确的,相同的凭据在我的Windows机器上工作

提取错误代码段,并尝试运行它独立,它看起来像这样:

  1. echo "Trying to get https://".$cfg[ 'Exchange.Server' ]."/EWS/Services.wsdl<br>";
  2. $curl = curl_init( 'https://'.$cfg[ 'Exchange.Server' ].'/EWS/Services.wsdl' );
  3. curl_setopt( $curl,CURLOPT_RETURNTRANSFER,true );
  4. curl_setopt( $curl,CURLOPT_HTTP_VERSION,CURL_HTTP_VERSION_1_1 );
  5. curl_setopt( $curl,CURLOPT_HTTPAUTH,CURLAUTH_NTLM );
  6. curl_setopt( $curl,CURLOPT_USERPWD,$cfg[ 'Exchange.User' ].':'.$cfg[ 'Exchange.Password' ] );
  7. curl_setopt( $curl,CURLOPT_SSL_VERIFYPEER,false );
  8. curl_setopt( $curl,CURLOPT_SSL_VERIFYHOST,false );
  9.  
  10. echo '<pre>';
  11. $response = curl_exec( $curl );
  12. $info = curl_getinfo( $curl );
  13.  
  14. var_dump( $info );
  15. var_dump( $response );
  16.  
  17. curl_close( $curl );

我在这里收到的结果是提到的401状态代码和一个空的响应
当我在浏览器中调用相同的URL或在Windows机器上使用相同的代码时,我将获得我想要的WSDL文件

其实我甚至不知道这是一个基于linux的问题,或者在某些时候我做错了,我现在在努力争取2天.

有没有人可能会发现我的错误或告诉我为什么它不起作用的原因?

我可以根据需要提供任何进一步的需求信息

如果您正确初始化您的肥皂客户端,您应该可以通过以下方式提出任何请求请求:
  1. $curl = curl_init($location); //'https://'.$server_address.'/EWS/Exchange.asmx'
  2. curl_setopt($ch,false);
  3. curl_setopt($ch,true);
  4. curl_setopt($ch,CURLOPT_HTTPHEADER,$headers); //valid soap headers with keep-alive
  5. curl_setopt($ch,CURLOPT_POST,true );
  6. curl_setopt($ch,CURLOPT_POSTFIELDS,$request);
  7. curl_setopt($ch,CURL_HTTP_VERSION_1_1);
  8. curl_setopt($ch,$user.':'.$password);
  9. $response = curl_exec($curl);

至于您的代码,请尝试注释以下行:

  1. curl_setopt( $curl,CURLAUTH_NTLM );

还可以看看这个包装器在你的设置上的工作原理:
http://ewswrapper.lafiel.net/
如果是这样,请查看使用的SOAP类 – 它使用内置的PHP作为基础.

为什么你不能在本地存储wsdl文件

更新:

好的,我在我的Debian框中玩了这个,这对我来说完美无瑕:

  1. $domain = 'xxxxxx';
  2. $user = 'xxxxxx';
  3. $password = 'xxxxxx';
  4. $ch = curl_init('https://'.$domain.'/EWS/Services.wsdl');
  5. curl_setopt($ch,CURLOPT_HEADER,0);
  6. curl_setopt($ch,$user.':'.$password);
  7. $response = curl_exec($ch);
  8. $info = curl_getinfo( $ch );
  9. $error = curl_error ($ch);
  10. print_r(array($response,$info,$error));

回报

  1. Array
  2. (
  3. [0] => <?xml version="1.0" encoding="utf-8"?>
  4. <wsdl:definitions
  5. (...)
  6. </wsdl:definitions>
  7. [1] => Array
  8. (
  9. [url] => xxxxx/EWS/Services.wsdl
  10. [content_type] => text/xml
  11. [http_code] => 200
  12. [header_size] => 250
  13. [request_size] => 147
  14. [filetime] => -1
  15. [ssl_verify_result] => 0
  16. [redirect_count] => 0
  17. [total_time] => 0.60574
  18. [namelookup_time] => 0.165249
  19. [connect_time] => 0.268173
  20. [pretransfer_time] => 0.474009
  21. [size_upload] => 0
  22. [size_download] => 55607
  23. [speed_download] => 91800
  24. [speed_upload] => 0
  25. [download_content_length] => 55607
  26. [upload_content_length] => 0
  27. [starttransfer_time] => 0.580931
  28. [redirect_time] => 0
  29. [certinfo] => Array
  30. (
  31. )
  32.  
  33. [redirect_url] =>
  34. )
  35.  
  36. [2] =>
  37. )

猜你在找的PHP相关文章