其实我有两个问题。
(1)如果仅检索标头而不是使用php和curl进行全页检索,那么在远程服务器上使用的 处理能力 或 带宽 是否有所减少?
(2)因为我认为并且可能是错误的,所以第一个问题的答案是 YES ,我试图获取远程文件的最后修改日期或If-Modified-
Since标头只是为了与它的时间日期进行比较本地存储的数据,因此,如果数据已更改,我可以将其存储在本地。但是,NULL
运行此脚本时,我的脚本似乎无法获取该信息:
class last_change {
public last_change;
function set_last_change() {
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://url/file.xml");
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_FILETIME, true);
curl_setopt($curl, CURLOPT_NOBODY, true);
// $header = curl_exec($curl);
$this -> last_change = curl_getinfo($header);
curl_close($curl);
}
function get_last_change() {
return $this -> last_change['datetime']; // I have tested with Last-Modified & If-Modified-Since to no avail
}
}
如果$header = curl_exec($curl)
未输入,则显示标题数据,即使我没有要求也是如此,如下所示:
HTTP/1.1 200 OK
Date: Fri, 04 Sep 2009 12:15:51 GMT
Server: Apache/2.2.8 (Linux/SUSE)
Last-Modified: Thu, 03 Sep 2009 12:46:54 GMT
ETag: "198054-118c-472abc735ab80"
Accept-Ranges: bytes
Content-Length: 4492
Content-Type: text/xml
基于此,返回“ Last-Modified”。
那么,我在做什么错呢?
您正在将$
header传递给curl_getinfo()
。应该是$curl
(卷曲手柄)。您可以filetime
通过将CURLINFO_FILETIME
作为第二个参数传递给来获得curl_getinfo()
。(通常filetime
是不可用,在这种情况下,它将报告为-1)。
但是,您的课程似乎很浪费,浪费了很多可能有用的信息。这是可以完成的另一种方法:
class URIInfo
{
public $info;
public $header;
private $url;
public function __construct($url)
{
$this->url = $url;
$this->setData();
}
public function setData()
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $this->url);
curl_setopt($curl, CURLOPT_FILETIME, true);
curl_setopt($curl, CURLOPT_NOBODY, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, true);
$this->header = curl_exec($curl);
$this->info = curl_getinfo($curl);
curl_close($curl);
}
public function getFiletime()
{
return $this->info['filetime'];
}
// Other functions can be added to retrieve other information.
}
$uri_info = new URIInfo('http://www.codinghorror.com/blog/');
$filetime = $uri_info->getFiletime();
if ($filetime != -1) {
echo date('Y-m-d H:i:s', $filetime);
} else {
echo 'filetime not available';
}
是的,服务器上的负载将减轻,因为它仅返回HTTP标头(毕竟响应HEAD
请求)。多少打火机会有很大的不同。
问题内容: 我正在通过curl检索gzip压缩的网页,但是当我将检索到的内容输出到浏览器时,我只是得到了原始的gzip压缩数据。如何在PHP中解码数据? 我发现的一种方法是将内容写入tmp文件,然后… ....但是,人,一定有更好的方法。 编辑:这不是文件,而是Web服务器返回的gzip压缩html页面。 问题答案: 我使用curl和:
我有以下CURL代码: 当我尝试获取页面时,大部分时间我都会获取我请求的整个页面。但是,有时我只会看到页面的一部分,例如: DOCTYPE html PUBLIC“-//W3C//DTD XHTML1.0//EN”http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" 我删除了“ 任何帮助都将不胜感激。
本文向大家介绍Dropbox API 在PHP中通过curl上传文件,包括了Dropbox API 在PHP中通过curl上传文件的使用技巧和注意事项,需要的朋友参考一下 示例 <ACCESS_TOKEN> 应该用OAuth 2访问令牌替换。
问题内容: 有什么方法可以使用PHP获取cURL请求的标头和正文?我发现这个选项: 将返回 正文和标头 ,但随后我需要对其进行解析以获取正文。有什么方法可以使两者更实用(和更安全)? 请注意,对于“单个请求”,我的意思是避免在GET / POST之前发出HEAD请求。 问题答案: 一种解决方案发布在PHP文档注释中:http : //www.php.net/manual/en/function.c
问题内容: 我一直在为它构建一个Rest API,并且一直在使用命令行中的curl对它进行测试,这对于CRUD非常容易 我可以从命令行成功进行这些调用 上面的调用很容易从命令行进行,并且可以在我的api上正常使用,但是现在我想使用PHP创建curl。如您所见,我将数据作为json字符串传递。我已经阅读了很多,我想我可能可以进行POST并包含POST字段,但是我无法找出如何通过GET传递http正文
我如何发送此信息: 到API: 使用cURL,我目前一直在使用: 其中我得到了结果(NGrok): GET/testDir/curlPost。php HTTP/1.1 接受:text/html、Application/xhtml xml、image/jxr、/ 接受语言:en-GB 用户代理:Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537