我一直想弄清楚爲什麼這兩天沒有工作。基本上我用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/)
乾杯
我認爲你可能會誤解返回給你的信息。他們在API文檔中有「緩存」部分,它表示所有請求都會在通話結束後的一段時間內獲得緩存響應。 – Ranty
有趣,但請注意,當我通過鏈接1直接訪問API(而不是使用我的腳本)時,更新更頻繁嗎?喜歡,我怎麼能複製腳本...如果可能? – Chrispy
這是一個API。他們沒問題,你會通過腳本發送請求。你是否真的認爲他們提供了額外的保護措施,以防止它們允許只返回一些較舊的結果。我很抱歉,這沒有多大意義。我敢打賭,問題不存在。你可以問問他們,因爲我看不到你的劇本存在缺陷,也許他們可以對此發表評論。 – Ranty