当前位置: 首页 > 面试题库 >

仅通过curl在php中检索标头

汪皓
2023-03-14
问题内容

其实我有两个问题。

(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