0

PHP CURL 函数有没有办法获取网站的内容,但在我们刚刚询问的字符上停止了。我认为这种缓冲。

所以脚本没有调用整个页面

所以这样的方案:

: curl execution
<html>
->
->
->
-> Title Detected
: curl close
->
->
->
->
</ html>

请这不是 DOM 问题。但是当它发现我们询问时,如何卷曲就停止了。这是我的代码:

function curl_download($Url){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $Url);
    curl_setopt($ch, CURLOPT_REFERER, $Url);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.46 Safari/536.5");
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    $output = curl_exec($ch);
    curl_close($ch);
    return $output;
}

如果 cURL 不能处理这个问题,那 fopen 呢?你有一个例子吗?谢谢之前。也请给我你的示例代码,谢谢

4

2 回答 2

0

这是一个非常简单的示例,使用fsockopen(). 扩展它以满足您的需求。

$host = 'www.site.com';
$port = 80;

$sock = fsockopen($host, $port, $errno, $errstr, 30);
if (!$sock) {
    die("Failed to connect.  $errno: $errstr");
}

// write http request to socket:
$request = "GET /file.html HTTP/1.0\r\n"
          ."Host: $host\r\n"
          ."User-Agent: some-user-agent\r\n"
          ."Connection: close\r\n"
          ."\r\n";

fwrite($sock, $request);

$buffer = '';  // buffer for storing response

while (!feof($sock)) {
    $buffer .= fgets($sock, 1024); // read 1024 bytes from socket, append to buffer

    if (strpos($buffer, '</title>') !== false)) { // title was found
        fclose($sock);
        break;
    }
}

因此,我们连接到远程主机上的 HTTP 服务器,发出一个简单的 HTTP/1.0 请求,并一次读取 1024 个字节的响应,直到检测到结束标题标签。一旦找到,连接就关闭了。

注意,即使我们没有从套接字读取整个响应,底层系统(PHP 和 OS 套接字层)可能已经读取了更多(或者可能全部取决于大小)的响应。无论哪种情况,您都确实阻止了 PHP 读取大部分响应。如果页面非常大,提前关闭套接字可能会阻止实际接收到大量数据。

希望有帮助。

于 2012-08-12T22:52:44.343 回答
0

我不认为你可以用 CURL 解析 DOM

我建议你使用像strstr、strtok这样的字符串函数...

http://www.php.net/manual/en/ref.strings.php

于 2012-08-12T22:47:22.000 回答