1

PHP - Curl - と Soapui (Curl Postfields で送信するために必要な soap/xml スクリプトを構築して検証するため) を使用すると、たとえば、連絡先をデフォルトの連絡先フォルダーに追加しようとしたときに返されるのはxml 形式の wsdl 定義。次のように設定された Curl コードを使用することで、以前の問題のいくつかを解決したと思います。

$ch = curl_init('https://'.$host.'/ews/services.wsdl'); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_NONE);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM);
curl_setopt($ch, CURLOPT_USERPWD, $username.':'.$password);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml; charset=utf-8' , 'Expect:')); 
curl_setopt($ch, CURLOPT_POST, false);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET" ); *this resolves the 405 http code return*
curl_setopt($ch, CURLOPT_POSTFIELDS, $xmlstr);
$response = curl_exec($ch);

$xmlstrのデータは次のとおりです。

$xmlstr = <<<XML
<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/" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
  <soap:Body>
      <CreateItem xmlns="http://schemas.microsoft.com/exchange/services/2006/messages">
         <SavedItemFolderId xmlns="http://schemas.microsoft.com/exchange/services/2006/messages">
            <DistinguishedFolderId Id="contacts" xmlns="http://schemas.microsoft.com/exchange/services/2006/types"/>
         </SavedItemFolderId>
         <Items xmlns="http://schemas.microsoft.com/exchange/services/2006/messages">
            <Contact xmlns="http://schemas.microsoft.com/exchange/services/2006/types">
               <FileAs>Friend A</FileAs>
               <GivenName>Don</GivenName>
               <CompanyName>AdventureWorks</CompanyName>
               <EmailAddresses>
                  <Entry Key="EmailAddress1">don@example.com</Entry>
               </EmailAddresses>
            </Contact>
         </Items>
      </CreateItem>
   </soap:Body>
</soap:Envelope>
XML;

サーバーからの応答/戻りは次のとおりです。

HTTP/1.1 200 OK
Content-Type: text/xml
Last-Modified: Tue, 05 Feb 2013 23:00:32 GMT
Accept-Ranges: bytes
ETag: "0685999f43ce1:0"
サーバー: Microsoft-IIS/7.5
Persistent-Auth: true
X-Powered-By: ASP.NET
Date: Mon, 08 Apr 2013 10:13:46 GMT
Content-Length: 101206

wsdl ファイルからの xml 形式の定義が続きます。

これに関する何らかの方向性に感謝します。私はいくつかのコーディング言語の経験がありますが、PHP の soap/xml および Curl コンポーネントは、現在の知識ではありません。

4

1 に答える 1

1

私は今問題を解決しました。基本的に、私が使用した URL は正しくありません。Curl_init は

$ch = curl_init('https://'.$host.'/EWS/Exchange.asmx');

setopts を次のように変更する必要があります。

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml; charset=utf-8')); 
curl_setopt($ch, CURLOPT_POST, true);

そして、あなたは必要ありません:

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET" );
于 2013-04-09T09:05:40.630 に答える