1

私は2日間、これが機能しない理由を理解しようとしています。基本的に私はTradeMeのAPIで遊んでいて、ここに.jsonファイルがあります。

リンク1:http ://api.trademe.co.nz/v1/Listings/Latest.json

APIのレート制限を使い果たすのではなく、大丈夫だと思いました...このファイルを取得して返すスクリプトをWebサーバーに書き込むだけです(もちろん、ローカルにキャッシュする必要がありますが、まだ十分ではありません。まだそこに着きました)。私のフェッチャーのURLは次のとおりです。

リンク2:http:// {MY URL} /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を介してこのスクリプトを呼び出しています。index.phpにキャッシュヘッダーなしを配置し​​、$。ajaxSetup({cache:false});も配置しました。しかし、運はありません。

何か案は?

(これはいくつかの光を当てるかもしれませんが、私はまだ何も見つけていません:http: //developer.trademe.co.nz/api-overview/

乾杯

4

2 に答える 2

0

TradeMeの担当者の1人と話をしましたが、リンク1とリンク2の動作が異なる理由はよくわからないと思いますが、解決策はURLに乱数(または時間)を追加することです。たとえば、 :

http://api.trademe.co.nz/v1/Listings/Latest.json&t=RANDOM_NUMBER

そして、それをフェッチスクリプトなどに入れます。

于 2012-12-11T21:31:29.607 に答える
0

少なくとも私のバージョンのChromeは、デフォルトでmax-age cacheディレクティブを送信します。これが、リクエスト間の違いだと思います。前にこれを追加してみてくださいcurl_exec

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Cache-Control:max-age=0'
));
于 2012-12-11T22:55:27.553 に答える