0

PHP CURL関数がWebサイトのコンテンツを取得する方法はありますが、要求された文字で停止します。この種のバッファだと思います。

そのため、スクリプトはページ全体を呼び出しませんでした

したがって、このようなスキーム:

: 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

CURLでDOMを解析できるとは思いません

strstr、strtokなどの文字列関数を使用することをお勧めします...

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

于 2012-08-12T22:47:22.000 に答える
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 に答える