curl - 相同的图像 URL 在 Cloudfare 服务器上返回 24 位或 32 位图像?(cURL“内容长度”检查)
问题描述
这让我很困惑,我似乎无法在任何地方找到任何可以解释这一点的信息。
我有一个包含大约 1,000 个图像 URL 的数据库,并且正在执行 cURL 标头回调
curl_setopt($this->curl, CURLOPT_HEADERFUNCTION, array($this, 'headerCallback'));
它在其中查找图像 URL 的内容长度 ...
if ($name === 'content-length' && (int) $value === $this->filesizecheck) {
curl_setopt($this->curl, CURLOPT_NOBODY, true);
}
filesizecheck
只需检查我服务器上已下载图像的文件大小。
CURLOPT_NOBODY
设置意味着如果我服务器上的文件大小与来自标头的内容长度匹配,它指示系统不要下载图像主体,并在标头处停止。
我最初的想法是检查图像 URL 中的图像是否发生了变化——如果是,下载并替换图像。如果不是 - 进行标题检查,然后跳过它。
令我惊讶的是,有时完全相同的图像 URL 会返回完全相同图像的 24 位或 32 位。这是我没有预料到的,显然是让我失望filesizecheck
!
以下是图像 url 的标题(如果它暗示任何内容):
Array
(
[0] => Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
[1] => Accept-Encoding: gzip, deflate
[2] => Accept-Language: en-US,en;q=0.9
[3] => Connection: keep-alive
[4] => Host: /////
[5] => Upgrade-Insecure-Requests: 1
)
现在,这仅在我经历过的一台服务器/主机上。
有没有人遇到过完全相同的图像 URL 返回相同图像的 24 位(示例content-length
值:397570
一个图像)或 32 位图像(content-length
值501502
:),为什么会这样,我能做些什么来解决这个奇怪的问题问题?
当然,如果图像“更改”,这会抛弃整个系统进行标头检查和下载图像——有时它想下载 24 位图像,有时它想下载 32 位图像——似乎完全随机至于何时返回 24 位或 32 位图像。
视觉上 - 图像没有区别。
我必须以某种方式从 24 位和 32 位图像中获取值才能使其正常工作吗?有谁知道为什么静态图像 URL 会返回(看似随机)同一图像的 24 位或 32 位?
建议的前进方向是什么?任何提示或信息将不胜感激!
解决方案
推荐阅读
- google-sheets - Google 表格:结合数组公式和 CountUniqueIfs
- java - 我创建了一个 maven 项目并为 web3j 添加了一个依赖项,但是当我创建一个新类并开始从 Web3j 导入库时找不到它
- git - git diff 从比较中排除文件夹
- r - 如何将两个虚拟变量包含到 vars 包的 VAR() 函数中?
- php - 如果值不为空,Laravel 将 DB::Raw 与 Concat 一起使用
- spring-data-jpa - 如何创建 JpaRepository 但不使用依赖注入
- r - 在带有数据框的列表中应用创建的函数
- elasticsearch - kibana 绘图数据值尊重时间戳而不是聚合数据
- c++ - 将输出直接从 makefile 打印到 .txt 文件
- gradle - Gradle 构建在任务 web:yarn_build 失败