【发布时间】:2014-01-15 09:32:15
【问题描述】:
我只想获取 HTML 正文的一些行,并且我正在使用带有 c URL 的 PHP(例如前 10 行)。获取某些部分是指我不想下载整个文件并获取其中的某些部分。
有什么方法可以只从服务器本身获取部分 HTML 文件?通过在 curl 或 PHP 中进行一些设置。
【问题讨论】:
我只想获取 HTML 正文的一些行,并且我正在使用带有 c URL 的 PHP(例如前 10 行)。获取某些部分是指我不想下载整个文件并获取其中的某些部分。
有什么方法可以只从服务器本身获取部分 HTML 文件?通过在 curl 或 PHP 中进行一些设置。
【问题讨论】:
如果服务器支持,你可以提出范围请求。
在您的 HTTP 请求标头中添加:
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Range: 0-1500',
));
…获取前 1500 个字节,可能是前十行,也可能不是前十行,具体取决于行的长度。
这个问题(除了服务器可能缺乏支持)是你需要知道你想要文档中的哪些字节,然后你必须从部分 HTML 而不是完整的 HTML 文档中提取数据。
【讨论】:
您可以使用 CURL 从 URL 下载部分内容:
这是一个函数:
function curl_get_content($url,$range_start,$range_end)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_HTTPHEADER, array ("Range: bytes=$range_start-$range_end"));
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
curl_get_content("http://www.example.org/some-file.zip",0,5000)
返回前 5000 个字节。
注意事项:
确定远程服务器是否支持 HTTP 206
curl -I http://s0.cyberciti.org/images/misc/static/2012/11/ifdata-welcome-0.png
示例输出:
HTTP/1.0 200 OK
Content-Type: image/png
Content-Length: 36907
Connection: keep-alive
Server: nginx
Date: Wed, 07 Nov 2012 00:44:47 GMT
X-Whom: l3-com-cyber
Cache-Control: public, max-age=432000000
Expires: Fri, 17 Jul 2026 00:44:46 GMT
Accept-Ranges: bytes // It accepts !
ETag: "278099835"
Last-Modified: Mon, 05 Nov 2012 23:06:34 GMT
Age: 298127
【讨论】:
curl_get_content("http://www.example.org/some-file.zip",0,3000),在这种情况下它停在3000字节。