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

WBOY
풀어 주다: 2016-06-06 20:46:09
원래의
1184명이 탐색했습니다.

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>
로그인 후 복사

但是这个不一定管用的,它只是发送了一个请求头,具体如何返回数据还是由发送方决定的,如果发送方支持分片返回则会生效,否则还是完整返回。通过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>
로그인 후 복사

关于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>
로그인 후 복사

根据你只想取得页面 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>
로그인 후 복사
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿