PHP curl在来回(缓存的?)和最新结果之间来回切换

时间:2018-09-20 02:09:28

标签: php caching google-sheets php-curl

好吧,就缺乏可重复性而言,这是一个很糟糕的问题,但是我确实需要一些建议,所以请多多包涵。

我有一个简单的PHP脚本,用于将禁用CORS的静态页面代理到脚本。该页面是google电子表格的“ pubhtml”版本(“文件→发布到网络”选项),其内容会不时更改。这是脚本(一个简单的版本):

// allow CORS to grab data via js
header("Access-Control-Allow-Origin: *");

$pageUrl = 'https://docs.google.com/spreadsheets/....../pubhtml';

// get the page
$curl_session = curl_init($pageUrl);
curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, true);
$proxiedRequestResponse = curl_exec($curl_session);
if($proxiedRequestResponse === false) {
    $request_error = curl_error($curl_session);
    //# deal with errors, use $request_error
}
curl_close($curl_session);

// send the result
print $proxiedRequestResponse;

很基本,对吧? (实际上,简化后的操作是我检查$_GET来代表我拥有的几页中的一页,但是它们肯定不会引起混淆)

现在的问题是,在某些时候,我注意到代理服务器有时会使用过时的数据进行响应。不仅如此,有时它还会提供最新的数据,并在此之后的一段时间内给出 响应(过了一段时间),然后将过时的数据再次返回! (将数据 older 的状态显示为之前已显示的状态)

我确定电子表格中的数据没有被逆转。我已经看到了pubhtml页面是最新的,并打开了它的代理版本,该页面显示了我过时的数据。我已经尝试过刷新,但有时只是使其保持最新状态。

我试图像这样向网址添加时间戳查询:

$pageUrl = '.....'.'?noCacheTimestamp='.date('mdYHis');

并添加了

curl_setopt($curl_session, CURLOPT_FRESH_CONNECT, TRUE);

但是仍然可以以任意顺序获取最新或过时的数据。

这真的很奇怪,所以任何关于为什么会发生这种情况或如何修复(或调试)的指针都非常受欢迎。

0 个答案:

没有答案