libcurl - php的curl裡面在擷取頁面html資料的時候能指定擷取的位元組數嗎?

來源:互聯網
上載者:User
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選項,計量單位是位元組,可以通過如下方式來設定:

curl_setopt($ch, CURLOPT_RANGE, '0-799');

但是這個不一定管用的,它只是發送了一個要求標頭,具體如何返回資料還是由發送方決定的,如果發送方支援分區返回則會生效,否則還是完整返回。通過stream也可以實現,也是發送range的頭資訊,所以結果應該是一樣的:

$context = stream_context_create(array('http' => 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

可以這樣..不過每次讀取,有可能會超過你規定的數值,判斷一下就好了.

 $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_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);</code></pre>
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.