2012-12-10 71 views
1

我一直想弄清楚爲什麼這兩天沒有工作。基本上我用TradeMe上面的API玩耍,他們在這裏有一個以.json文件:PHP + cURL - 輸出比預期的要舊?

鏈接1:http://api.trademe.co.nz/v1/Listings/Latest.json

而不是窮盡API速率限制我想確定...我就寫一個腳本爲我的Web服務器抓取這個文件並將其返回給我(我將不得不在本地緩存它,但我還沒有完全到達那裏)。我們只是說我的提取URL是這樣的:

鏈接2:http:// {我的網址} /trademe/fetcher.php?url=http://api.trademe.co.nz/v1/Listings/Latest .json

事情是...什麼cURL返回我的鏈接2不是什麼鏈接1返回我!每次我運行我的腳本(鏈接2)時,它總是給我一箇舊版本的鏈接1的JSON文件(我知道它是一個較舊的版本,因爲我查看JSON文件中的ListingId數字)。有時我運行鏈接2,它給了我一個更新的JSON,然後當我刷新腳本時,它又給了我舊的JSON! (請注意,如果我在Chrome中直接訪問鏈接1它總是給我最新的JSON文件有什麼毛病我的腳本?)

這裏是我的腳本:

<?php 

set_time_limit(3600); 

header("Content-Type: application/json"); 
header("Expires: on, 01 Jan 1970 00:00:00 GMT"); 
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
header("Cache-Control: no-store, no-cache, must-revalidate"); 
header("Cache-Control: post-check=0, pre-check=0", false); 
header("Pragma: no-cache"); 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/534.51.22 (KHTML, like Gecko) Version/5.1.1 Safari/534.51.22'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_FORBID_REUSE, 1); 
curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1); 
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0); 
curl_setopt($ch, CURLOPT_FAILONERROR, false); 
curl_setopt($ch, CURLOPT_URL, $_GET['url']); 
$contents = curl_exec($ch); 
curl_close($ch); 

echo $contents; 
?> 

我基本上調用此腳本通過jQuery的$ .getJSON。我甚至把no緩存頭放在我的index.php文件中,並放入$ .ajaxSetup({cache:false});但沒有運氣。

任何想法?

(這可能會提供一些線索,但我還沒有找到任何東西:http://developer.trademe.co.nz/api-overview/

乾杯

+0

我認爲你可能會誤解返回給你的信息。他們在API文檔中有「緩存」部分,它表示所有請求都會在通話結束後的一段時間內獲得緩存響應。 – Ranty

+0

有趣,但請注意,當我通過鏈接1直接訪問API(而不是使用我的腳本)時,更新更頻繁嗎?喜歡,我怎麼能複製腳本...如果可能? – Chrispy

+0

這是一個API。他們沒問題,你會通過腳本發送請求。你是否真的認爲他們提供了額外的保護措施,以防止它們允許只返回一些較舊的結果。我很抱歉,這沒有多大意義。我敢打賭,問題不存在。你可以問問他們,因爲我看不到你的劇本存在缺陷,也許他們可以對此發表評論。 – Ranty

回答

0

至少我的Chrome版本默認發送max-age cache指令,我認爲這是請求之間的差異。嘗試添加此之前curl_exec

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Cache-Control:max-age=0' 
)); 
+0

剛纔我試過了,它對我沒有用。不過謝謝(也許它可能適用於其他人?)!但我之前找到了一種解決方法(我的回答在此評論下面)。 – Chrispy