在我们开始之前:我是一个菜鸟。
我正在尝试访问 YQL 以获取一些信息。使用 PHP 的 file_get_contents 获取它很简单,但似乎客户端的 ISP 或服务器正在缓存响应。为了说明问题,请尝试加载:
--
刷新该页面几次 - 注意“created”字符串没有改变 - 每次刷新时应该会间隔几秒钟,就像这个测试示例一样:
--
现在我的问题是,这是系统管理员为了缓存东西而玩的某种把戏,还是 ISP 干的什么事?我能绕过它吗?我必须通过 URL 访问 YQL,因为我需要能够解析它。
(系统管理员很难联系到)
提前致谢。
编辑
我已经找到了绕过缓存的方法。您可以随机化字符串并使用下面 @Coops 提到的技巧,也可以使用此处的代码。大多数情况下,您可以通过发送 Pragma: no-cache 标头来跳过缓存,创建上下文并使用它:
// Create a stream
$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>"Accept-language: en\r\n" .
"Pragma: no-cache"
)
);
$context = stream_context_create($opts);
// Open the file using the HTTP headers set above
$file = file_get_contents('http://example.com');
我仍然无法弄清楚缓存是由系统管理员还是 ISP 配置的。
答案1
您可以从响应中检查一些特定的标头:Age
、、、。这些标头的值可以帮助您确定所需的内容。有关详细信息和标头描述,Expires
请参阅ETag
Via
Responses
HTTP 标头列表。
例如,Via
标头的值可以告诉您从代理收到了响应,而代理可以在其自己的缓存中保存您请求的数据。