PHP+cURL-输出比预期的要旧?

PHP+cURL-输出比预期的要旧?,php,curl,Php,Curl,两天来我一直在想为什么这不管用。基本上我是在玩TradeMe的API,他们在这里有一个.json文件: 链接1: 而不是穷尽API速率限制,我认为可以。。。我将为我的web服务器编写一个脚本,它将获取这个文件并返回给我。当然,我必须在本地缓存它,但我还没有完全实现。假设我的抓取器URL为: 链接2:http://{myurl}/trademe/fetcher.php?URL=http://api.trademe.co.nz/v1/Listings/Latest.json 问题是。。。cURL为l

两天来我一直在想为什么这不管用。基本上我是在玩TradeMe的API,他们在这里有一个.json文件:

链接1:

而不是穷尽API速率限制,我认为可以。。。我将为我的web服务器编写一个脚本,它将获取这个文件并返回给我。当然,我必须在本地缓存它,但我还没有完全实现。假设我的抓取器URL为:

链接2:http://{myurl}/trademe/fetcher.php?URL=http://api.trademe.co.nz/v1/Listings/Latest.json

问题是。。。cURL为link2返回的不是link1返回的!每次我运行脚本link2时,它总是给我一个link1的JSON文件的旧版本,我知道这是一个旧版本,因为我看到JSON文件中的ListingId号。有时我运行link2,它会给我一个新的JSON,然后当我刷新脚本时,它会再次给我一个旧的JSON!请注意,如果我直接在Chrome中访问link1,它总是提供最新的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};但是没有运气

有什么想法吗

这可能会带来一些启发,但我还没有找到任何东西:


干杯

我和TradeMe的一位同事谈过,虽然我不认为我们真的明白为什么链接1和链接2的行为不同,但解决方法是在URL中添加一些随机数甚至时间,例如:


然后在抓取脚本或任何东西中使用它。

至少我的Chrome版本默认发送max age cache指令,我认为这就是请求之间的区别。尝试在curl_exec之前添加以下内容:


我认为您可能误解了返回给您的信息。API文档中有缓存部分,它说所有请求都会在调用后的一段时间内得到缓存响应。有趣的是,请注意,当我直接通过链接1访问API而不是使用脚本时,更新的频率会更高?比如,我如何用脚本复制它。。。如果可能的话?这是一个API。他们同意您将通过一些脚本发送请求。你真的认为他们做了一个额外的保护层来防止他们只允许返回一些旧的结果吗。对不起,那没什么意义。我打赌这个问题不存在。你可以问他们,因为我看不出你的剧本有什么缺点,也许他们可以评论一下。谢谢你。是的,值得联系他们。干杯。当他们回答时,请将解决方案作为答案发布并接受,这样问题将被标记为已解决。刚才我尝试过,但它对我无效。谢谢,也许对其他人有用?!我之前确实找到了一个解决办法,但我的答案就在这条评论下面。
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Cache-Control:max-age=0'
));