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

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

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

curl_setopt$ch, CURLOPT_RANGE, 0-799;

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

$context = stream_context_createarrayhttp => array header=> Range: bytes=0-799;
$data = file_get_contents"http://example.com/file.html", FALSE, $context;

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

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

<?php error_reportingE_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;

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

$content = file_get_contentshttp://www.baidu.com, false, null, -1, 800; ifmb_detect_encoding$content == GB2312 $content = iconvGB2312, UTF-8, $content; preg_match"/<title>.*</title>/", $content, $title;

发表评论

电子邮件地址不会被公开。 必填项已用*标注