2014-09-03 103 views
0

我試圖建立與加拿大(CREA)一家房地產上市API的連接,並根據documentation如何設置的cookie在PHP捲曲請求

成功登錄響應頭包括帶有 X-SESSIONID值的Set-Cookie。這種X-的SessionID值需要在登錄後要與 每個請求提交。

該服務提供了一個樣本API用於設置了一切,但每當我試圖搶X-SESSIONID值,並將其設置爲後來的請求,它似乎並沒有工作,我得到一個401 Unauthorized頭隨後的所有請求(即使我能夠成功地獲取X-SessionID信息)。

這裏是我現在使用的代碼:

<?php 

    $ch = curl_init('http://sample.data.crea.ca/Login.svc/Login'); 

    curl_setopt($ch, CURLOPT_HEADER, true); 
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_USERPWD, 'CXLHfDVrziCfvwgCuL8nUahC:mFqMsCSPdnb5WO1gpEEtDCHH'); 

    $xml = curl_exec($ch); 
    curl_close($ch); 

    echo '<pre>' . htmlspecialchars($xml) . '</pre>'; 

    preg_match('|Set-Cookie: (X-SESSIONID=.*?);.*|', $xml, $match); 

    echo '<pre>'; 
    print_r($match); 
    echo '</pre>'; 

    $ch = curl_init('http://sample.data.crea.ca/Metadata.svc/GetMetadata?Type=METADATA-RESOURCE&Format=STANDARD-XML&ID=0'); 

    curl_setopt($ch, CURLOPT_COOKIE, $match[1]); 
    curl_setopt($ch, CURLOPT_HEADER, true); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

    $xml = curl_exec($ch); 
    curl_close($ch); 

    echo '<pre>' . htmlspecialchars($xml) . '</pre>'; 

因爲這是一個樣本API提供給任何人免費,你可以運行上面的代碼是看我得到的錯誤。

有關如何正確提交X-SessionID值的任何建議,以便我可以正確驗證並進行後續請求將不勝感激。
謝謝。

回答

0

只要做到:

curl_setopt($ch, CURLOPT_COOKIEJAR, ''); 

現在捲曲將採取餅乾的照顧。你不需要解析任何東西或手動設置它們

+0

這似乎並不奏效。我認爲你是對的,因爲我必須使用'CURLOPT_COOKIEJAR',但我試圖在不同的地方放置這行代碼,並且它不起作用。我是否也需要使用'CURLOPT_COOKIEFILE'?那麼'CURLOPT_COOKIESESSION'呢?另外,爲什麼第三個參數爲空字符串?謝謝。 – HartleySan 2014-09-03 12:32:37