libcurl - php的curl里面在获取页面html数据的时候能指定获取的字节数吗?

WBOY
Freigeben: 2016-06-06 20:46:09
Original
1184 Leute haben es durchsucht

RT
本来用的 fopen + fread($fp,读取字节数) 获取数据 SAE 不支持 就想改为curl
我只需要匹配出来title的值就行 去文件的前 800字节就ok了,curl参数众多,不知道该设置哪个。
毕竟获取整个html文件会消耗大量时间,只要前800字节就行,这样应该会节省点时间吧,我用microtime 测试出来的时间差别不大但是还是有差别的

回复内容:

RT
本来用的 fopen + fread($fp,读取字节数) 获取数据 SAE 不支持 就想改为curl
我只需要匹配出来title的值就行 去文件的前 800字节就ok了,curl参数众多,不知道该设置哪个。
毕竟获取整个html文件会消耗大量时间,只要前800字节就行,这样应该会节省点时间吧,我用microtime 测试出来的时间差别不大但是还是有差别的

cURL有一个range选项,计量单位是字节,可以通过如下方式来设定:

<code>curl_setopt($ch, CURLOPT_RANGE, '0-799');
</code>
Nach dem Login kopieren

但是这个不一定管用的,它只是发送了一个请求头,具体如何返回数据还是由发送方决定的,如果发送方支持分片返回则会生效,否则还是完整返回。通过stream也可以实现,也是发送range的头信息,所以结果应该是一样的:

<code>$context = stream_context_create(array('http' => array ('header'=> 'Range: bytes=0-799')));
$data = file_get_contents("http://example.com/file.html", FALSE, $context);
</code>
Nach dem Login kopieren

关于range header的rfc文档:http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35

可以这样..不过每次读取,有可能会超过你规定的数值,判断一下就好了.

<code class="lang-php"><?php error_reporting(E_ALL);

$data = '';
$url = 'http://segmentfault.com/q/1010000000482129';

$ch = curl_init();
curl_setopt_array($ch, array(
    CURLOPT_URL => $url,
    CURLOPT_WRITEFUNCTION => 'receivePartial', 
));
curl_exec($ch);
curl_close($ch);

function receivePartial($ch, $chunk) {
    global $data;
    $data .= $chunk;

    $len = strlen($chunk);
    echo 'had receive ', $len, ' bytes', PHP_EOL;
    //判断每次读取,如果总数大于1000,就不再往下读了.
    if (strlen($data) >= 1000) {
        return -1;
    }    
    //返回值是告知CURL,是否已够了,要不要再读啦.
    return $len;
}

echo $data;
</code>
Nach dem Login kopieren

根据你只想取得页面 title 的需求,使用 file_get_contents 函数是不是更合适?

<code>$content = file_get_contents('http://www.baidu.com',  false, null, -1, 800);

if(mb_detect_encoding($content) == 'GB2312')
    $content = iconv('GB2312', 'UTF-8', $content);

preg_match("/<title>.*/", $content, $title);
</title></code>
Nach dem Login kopieren
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage