ホームページ  >  記事  >  バックエンド開発  >  スヌーピー(強力なPHPコレクションクラス)詳細紹介

スヌーピー(強力なPHPコレクションクラス)詳細紹介

WBOY
WBOYオリジナル
2016-08-08 09:32:161702ブラウズ
Snoopy は、ブラウザの機能をシミュレートするために使用される php クラスであり、Web コンテンツを取得したり、フォームを送信したり、いくつかの収集プログラムや泥棒プログラムを開発するために使用できます。この記事では、snoopy の使い方チュートリアルを詳しく紹介します。 スヌーピーのいくつかの機能:
  • Web ページのコンテンツを取得します。 fetch

  • Web ページのテキスト コンテンツを取得します (HTML タグを削除します) fetchtext

  • Web ページのリンクを取得します。 fetchlinks fetchform

  • プロキシホストをサポート

  • 基本的なユーザー名/パスワード認証をサポート

  • user_agent、リファラー(ソース)、Cookie、ヘッダーコンテンツ(ヘッダーファイル)の設定​​をサポート

  • ブラウザのリダイレクトと制御をサポート リダイレクト深さ

  • は、Webページ内のリンクを高品質のURLに展開できます(デフォルト)

  • データを送信し、戻り値を取得します

  • HTMLフレームワークの追跡をサポート

  • リダイレクト中の配信をサポート

  • PHP 4 以降のみが必要です。PHP クラスであるため、サポートを拡張する必要はありません。サーバーがカールをサポートしていない場合の最良の選択は、
    Snoopy クラスのメソッドと例です。 fetch( $URI)これは、Web ページのコンテンツをクロールするために使用されるメソッドです。
    $URI パラメータは、クロールされた Web ページの URL アドレスです。 クロールされた結果は $this->results に保存されます。 フレームをスクレイピングしている場合、スヌーピーは各フレームを追跡して配列に保存し、$this->results に保存します。 fetchtext($URI)このメソッドは fetch() に似ていますが、唯一の違いは、このメソッドが HTML タグやその他の無関係なデータを削除し、Web ページ内のテキスト コンテンツのみを返すことです。
    fetchform($URI)このメソッドは fetch() に似ていますが、唯一の違いは、このメソッドが HTML タグとその他の無関係なデータを削除し、Web ページのフォーム コンテンツ (フォーム) のみを返すことです。 。
    fetchlinks($URI)このメソッドは fetch() に似ていますが、唯一の違いは、このメソッドは HTML タグとその他の無関係なデータを削除し、Web ページ内のリンクのみを返すことです。
    デフォルトでは、相対リンクは自動的に完成され、完全な URL に変換されます。 submit($URI,$formvars) このメソッドは、$URL で指定されたリンク アドレスに確認フォームを送信します。 $formvars はフォームパラメータを格納する配列です。
    submittext($URI,$formvars)このメソッドは submit() と似ていますが、唯一の違いは、このメソッドが HTML タグとその他の無関係なデータを削除し、Web ページ内のテキスト コンテンツのみを返すことです。ログイン後。
    submitlinks($URI)このメソッドは submit() と似ていますが、唯一の違いは、このメソッドが HTML タグやその他の無関係なデータを削除し、Web ページ内のリンクのみを返すことです。 デフォルトでは、相対リンクは自動的に完成され、完全な URL に変換されます。 スヌーピーコレクションクラス属性: (デフォルト値は括弧内)
    $host 接続されたホスト $port 接続されたポート $proxy_host 使用されるプロキシホスト (存在する場合) $proxy_port使用されるプロキシ ホスト ポート (存在する場合) $agent ユーザー エージェント カモフラージュ (Snoopy v0.1) $referer ソース情報 (存在する場合) $cookies Cookie (存在する場合) $ rawheaders その他のヘッダー情報 (存在する場合) $maxredirs リダイレクトの最大数、0=許可されません (5)$offsiteok オフサイトへのリダイレクトを許可するかどうか (true)$expandlinks リンクするかどうか 完全なアドレスにすべて完了します (true)。 $user 認証ユーザー名 (存在する場合) $pass 認証ユーザー名 (存在する場合) $accept http 受け入れタイプ (image/gif、image/x-xbitmap、image/jpeg、image/pjpeg、*/*) $error エラーがある場合、どこに報告するか $response_code サーバーから返された応答コード $headers サーバーから返されたヘッダー情報 $maxlength 最長の戻りデータ長 $read_timeout 読み取り操作のタイムアウト (必須) PHP 4 Beta 4+) タイムアウトなしの場合は 0 に設定します$timed_out 読み取り操作がタイムアウトすると、この属性は true を返します (PHP 4 Beta 4+ が必要です)$maxframes 追跡できる最大フレーム数$status キャプチャされた http$temp_dir Web サーバーが書き込むことができる一時ファイルのディレクトリ (/tmp)$curl_path cURL バイナリのディレクトリ (cURL がない場合は、バイナリを false に設定します)
    以下は例です:
    include "Snoopy.class.php";
     $snoopy = new Snoopy;
      
     $snoopy->proxy_host = "http://www.9it.me";
     $snoopy->proxy_port = "80";
      
     $snoopy->agent = "(compatible; MSIE 4.01; MSN 2.5; AOL 4.0; Windows 98)";
     $snoopy->referer = "http://www.9it.me";
      
     $snoopy->cookies["SessionID"] = 238472834723489l;
     $snoopy->cookies["favoriteColor"] = "RED";
      
     $snoopy->rawheaders["Pragma"] = "no-cache";
      
     $snoopy->maxredirs = 2;
     $snoopy->offsiteok = false;
     $snoopy->expandlinks = false;
      
     $snoopy->user = "joe";
     $snoopy->pass = "bloe";
      
     if($snoopy->fetchtext("http://www.9it.me"))
     {
     echo "<PRE>".htmlspecialchars($snoopy->results)."
    \n"; } else echo "error fetching document: ".$snoopy->error."\n";指定されたURLのコンテンツを取得します
    <?php
     $url = "http://www.9it.me";
     include("snoopy.php");
     $snoopy = new Snoopy;
     $snoopy->fetch($url); //获取所有内容
     echo $snoopy->results; //显示结果
     //可选以下
     $snoopy->fetchtext //获取文本内容(去掉html代码)
     $snoopy->fetchlinks //获取链接
     $snoopy->fetchform  //获取表单
     ?>
    表单提交
    <?php
    $formvars["username"] = "admin";
    $formvars["pwd"] = "admin";
    $action = "http://www.9it.me";//</a>表单提交地址
    $snoopy->submit($action,$formvars);//$formvars为提交的数组
    echo $snoopy->results; //获取表单提交后的 返回的结果
    //可选以下
    $snoopy->submittext; //提交后只返回 去除html的 文本
    $snoopy->submitlinks;//提交后只返回 链接
    ?>
    既然已经提交的表单 那就可以做很多事情 接下来我们来伪装ip,伪装浏览器

    伪装浏览器
    <?php
    $formvars["username"] = "lanfengye";
    $formvars["pwd"] = "lanfengye";
    $action = "http://www.9it.me";
    include "snoopy.php";
    $snoopy = new Snoopy;
    $snoopy->cookies["PHPSESSID"] = 'fc106b1918bd522cc863f36890e6fff7'; //伪装sessionid
    $snoopy->agent = "(compatible; MSIE 4.01; MSN 2.5; AOL 4.0; Windows 98)"; //伪装浏览器
    $snoopy->referer = "http://www.9it.me"; //伪装来源页地址 http_referer
    $snoopy->rawheaders["Pragma"] = "no-cache"; //cache 的http头信息
    $snoopy->rawheaders["X_FORWARDED_FOR"] = "127.0.0.101"; //伪装ip
    $snoopy->submit($action,$formvars);
    echo $snoopy->results;
    ?>
    原来我们可以伪装session 伪装浏览器 ,伪装ip, haha 可以做很多事情了。例如 带验证码,验证ip 投票, 可以不停的投。ps:这里伪装ip ,其实是伪装http头, 所以一般的通过 REMOTE_ADDR 获取的ip是伪装不了,反而那些通过http头来获取ip的(可以防止代理的那种) 就可以自己来制造ip。关于如何验证码 ,简单说下:首先用普通的浏览器, 查看页面 , 找到验证码所对应的sessionid,同时记下sessionid和验证码值,接下来就用snoopy去伪造 。原理:由于是同一个sessionid 所以取得的验证码和第一次输入的是一样的。
    有时我们可能需要伪造更多的东西,snoopy完全为我们想到了
    <?php
    $snoopy->proxy_host = "http://www.9it.me";
    $snoopy->proxy_port = "8080"; //使用代理
    $snoopy->maxredirs = 2; //重定向次数
    $snoopy->expandlinks = true; //是否补全链接 在采集的时候经常用到
    // 例如链接为 /images/taoav.gif 可改为它的全链接 <a href="http://www.9it.me/images/taoav.gif">http://www.9it.me/images/taoav.gif</a>
    $snoopy->maxframes = 5 //允许的最大框架数
    //注意抓取框架的时候 $snoopy->results 返回的是一个数组
    $snoopy->error //返回报错信息
    ?>

    以上就介绍了snoopy(强大的PHP采集类) 详细介绍,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

    声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。