Heim >Backend-Entwicklung >PHP-Tutorial >Detaillierte Einführung in Snoopy (leistungsstarke PHP-Sammlungsklasse).

Detaillierte Einführung in Snoopy (leistungsstarke PHP-Sammlungsklasse).

WBOY
WBOYOriginal
2016-08-08 09:32:161739Durchsuche
Snoopy ist eine PHP-Klasse, die zur Simulation der Funktionen eines Browsers verwendet wird. Sie kann Webinhalte abrufen, Formulare senden und zur Entwicklung einiger Sammlungsprogramme und Diebprogramme verwendet werden Detail. Einige Funktionen von Snoopy:
  • Den Inhalt der Webseite abrufen.

  • Den Textinhalt des Webs abrufen Seite (HTML-Tag entfernen) fetchtext

  • Fangen Sie die Links der Webseite ab, bilden Sie fetchlinks fetchform

  • Proxy-Host unterstützen

  • Unterstützt die grundlegende Überprüfung von Benutzername/Passwort

  • Unterstützt die Einstellung von User_Agent, Referrer (Quelle), Cookies und Header-Inhalt (Header-Datei)

  • Unterstützt die Browserumleitung und kann die Umleitungstiefe steuern

  • Kann Links in Webseiten in hochwertige URLs erweitern (Standard)

  • Senden Sie Daten und erhalten Sie den Rückgabewert

  • Unterstützt das Tracking-HTML-Framework

  • Unterstützt die Übergabe von Cookies bei der Weiterleitung

  • Erfordert PHP 4 oder höher. Da es sich um eine PHP-Klasse handelt, besteht keine Notwendigkeit, die Unterstützung zu erweitern.
    Methoden und Beispiele der Snoopy-Klasse:
    fetch($URI)Dies ist die Methode, mit der der Inhalt der Webseite gecrawlt wird . Der $URI-Parameter ist die URL-Adresse der gecrawlten Webseite. Die abgerufenen Ergebnisse werden in $this->results gespeichert. Wenn Sie einen Frame scrapen, verfolgt Snoopy jeden Frame, speichert ihn in einem Array und speichert ihn dann in $this->results.
    fetchtext($URI)Diese Methode ähnelt fetch(). Der einzige Unterschied besteht darin, dass diese Methode HTML-Tags und andere irrelevante Daten entfernt Es wird nur der Textinhalt der Webseite zurückgegeben.
    fetchform($URI)Diese Methode ähnelt fetch(). Der einzige Unterschied besteht darin, dass diese Methode HTML-Tags und andere irrelevante Daten entfernt . Es wird nur der Formularinhalt (Formular) auf der Webseite zurückgegeben.
    fetchlinks($URI)Diese Methode ähnelt fetch(). Der einzige Unterschied besteht darin, dass diese Methode HTML-Tags und andere irrelevante Daten entfernt . Es werden nur Links auf der Webseite zurückgegeben. Standardmäßig werden relative Links automatisch vervollständigt und in vollständige URLs umgewandelt.
    submit($URI,$formvars)Diese Methode sendet ein Bestätigungsformular an die durch $URL angegebene Linkadresse. $formvars ist ein Array, das Formularparameter speichert.
    submittext($URI,$formvars)Diese Methode ähnelt subscribe(), der einzige Unterschied besteht darin, dass diese Methode HTML-Tags und entfernt Sonstiges Keine relevanten Daten, nur der Textinhalt der Webseite nach der Anmeldung wird zurückgegeben.
    submitlinks($URI)Diese Methode ähnelt subscribe(). Der einzige Unterschied besteht darin, dass diese Methode HTML-Tags und andere irrelevante Daten entfernt und nur Links auf der Webseite zurückgibt. Standardmäßig werden relative Links automatisch vervollständigt und in vollständige URLs umgewandelt. Snoopy-Sammlungsklassenattribute: (Standardwert steht in Klammern)
    $host Der verbundene Host $port Der Port, mit dem eine Verbindung hergestellt werden sollDer von $proxy_host verwendete Proxy-Host, falls vorhanden$proxy_port Der von $proxy_port verwendete Proxy-Host-Port, falls vorhanden$agent Benutzer-Agent-Verkleidung (Snoopy v0.1)$Referer-Quelleninformationen, falls vorhanden$cookies Cookies, falls vorhanden$ rawheaders Anderer Header Informationen, falls vorhanden $maxredirs Maximale Anzahl von Weiterleitungen, 0=nicht zulässig (5)$offsiteok, ob Weiterleitungen außerhalb der Website zugelassen werden sollen oder nicht (true)$expandlinks Ob alle Links zu vollständigen Adressen vervollständigt werden sollen (true)$Benutzername für die Authentifizierung, falls vorhanden$Benutzername für die Authentifizierung übergeben, falls ja$ akzeptieren http Akzeptieren Sie den Typ (image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*)$error Wo kann der Fehler gemeldet werden, falls vorhanden $ Response_code Der vom Server zurückgegebene Antwortcode$headers Die vom Server zurückgegebenen Header-Informationen$maxlength Die längste zurückgegebene Datenlänge$ read_timeout Timeout des Lesevorgangs (erfordert PHP 4 Beta 4+) Auf 0 gesetzt, um keine Zeitüberschreitung zu erhalten $timed_out Wenn bei einem Lesevorgang eine Zeitüberschreitung auftritt, gibt dieses Attribut „true“ zurück (erfordert PHP 4 Beta 4+) $maxframes Die maximale Anzahl von Frames, die verfolgt werden dürfen$status Der Status des erfassten http$temp_dir Das temporäre Dateiverzeichnis, in das der Webserver schreiben kann (/tmp) $curl_path cURL-Binärverzeichnis. Wenn kein cURL-Binärverzeichnis vorhanden ist, setzen Sie es auf „false“
    Das Folgende ist ein Beispiel:
    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"; Holen Sie sich den Inhalt der angegebenen 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教程有兴趣的朋友有所帮助。

    Stellungnahme:
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn