PHPackages                             geol/snoopy - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. geol/snoopy

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

geol/snoopy
===========

use Snoopy Library &gt;= PHP 8

v2.0.1(3y ago)212MITPHPPHP  ^8.0

Since Apr 19Pushed 3y agoCompare

[ Source](https://github.com/Geol2/Snoopy)[ Packagist](https://packagist.org/packages/geol/snoopy)[ RSS](/packages/geol-snoopy/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (1)Versions (4)Used By (0)

NAME:

```
Snoopy - the PHP net client v2.0.1

```

SYNOPSIS:

```
include "Snoopy.class.php";
$snoopy = new Snoopy;

$snoopy->fetchtext("http://www.php.net/");
print $snoopy->results;

$snoopy->fetchlinks("http://www.phpbuilder.com/");
print $snoopy->results;

$submit_url = "http://lnk.ispi.net/texis/scripts/msearch/netsearch.html";

$submit_vars["q"] = "amiga";
$submit_vars["submit"] = "Search!";
$submit_vars["searchhost"] = "Altavista";

$snoopy->submit($submit_url,$submit_vars);
print $snoopy->results;

$snoopy->maxframes=5;
$snoopy->fetch("http://www.ispi.net/");
echo "\n";
echo htmlentities($snoopy->results[0]);
echo htmlentities($snoopy->results[1]);
echo htmlentities($snoopy->results[2]);
echo "\n";

$snoopy->fetchform("http://www.altavista.com");
print $snoopy->results;

```

DESCRIPTION:

```
What is Snoopy?

Snoopy is a PHP class that simulates a web browser. It automates the
task of retrieving web page content and posting forms, for example.

Some of Snoopy's features:

* easily fetch the contents of a web page
* easily fetch the text from a web page (strip html tags)
* easily fetch the the links from a web page
* supports proxy hosts
* supports basic user/pass authentication
* supports setting user_agent, referer, cookies and header content
* supports browser redirects, and controlled depth of redirects
* expands fetched links to fully qualified URLs (default)
* easily submit form data and retrieve the results
* supports following html frames (added v0.92)
* supports passing cookies on redirects (added v0.92)

```

REQUIREMENTS:

```
Snoopy requires PHP with PCRE (Perl Compatible Regular Expressions),
which should be PHP 3.0.9 and up. For read timeout support, it requires
PHP 4 Beta 4 or later. Snoopy was developed and tested with PHP 3.0.12.

```

CLASS METHODS:

```
fetch($URI)
-----------

This is the method used for fetching the contents of a web page.
$URI is the fully qualified URL of the page to fetch.
The results of the fetch are stored in $this->results.
If you are fetching frames, then $this->results
contains each frame fetched in an array.

fetchtext($URI)
---------------

This behaves exactly like fetch() except that it only returns
the text from the page, stripping out html tags and other
irrelevant data.

fetchform($URI)
---------------

This behaves exactly like fetch() except that it only returns
the form elements from the page, stripping out html tags and other
irrelevant data.

fetchlinks($URI)
----------------

This behaves exactly like fetch() except that it only returns
the links from the page. By default, relative links are
converted to their fully qualified URL form.

submit($URI,$formvars)
----------------------

This submits a form to the specified $URI. $formvars is an
array of the form variables to pass.

submittext($URI,$formvars)
--------------------------

This behaves exactly like submit() except that it only returns
the text from the page, stripping out html tags and other
irrelevant data.

submitlinks($URI)
----------------

This behaves exactly like submit() except that it only returns
the links from the page. By default, relative links are
converted to their fully qualified URL form.

```

CLASS VARIABLES: (default value in parenthesis)

```
$host			the host to connect to
$port			the port to connect to
$proxy_host		the proxy host to use, if any
$proxy_port		the proxy port to use, if any
$agent			the user agent to masqerade as (Snoopy v0.1)
$referer		referer information to pass, if any
$cookies		cookies to pass if any
$rawheaders		other header info to pass, if any
$maxredirs		maximum redirects to allow. 0=none allowed. (5)
$offsiteok		whether or not to allow redirects off-site. (true)
$expandlinks	whether or not to expand links to fully qualified URLs (true)
$user			authentication username, if any
$pass			authentication password, if any
$accept			http accept types (image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*)
$error			where errors are sent, if any
$response_code	responde code returned from server
$headers		headers returned from server
$maxlength		max return data length
$read_timeout	timeout on read operations (requires PHP 4 Beta 4+)
				set to 0 to disallow timeouts
$timed_out		true if a read operation timed out (requires PHP 4 Beta 4+)
$maxframes		number of frames we will follow
$status			http status of fetch
$temp_dir		temp directory that the webserver can write to. (/tmp)
$curl_path		system path to cURL binary, set to false if none

```

EXAMPLES:

```
Example: 	fetch a web page and display the return headers and
			the contents of the page (html-escaped):

include "Snoopy.class.php";
$snoopy = new Snoopy;

$snoopy->user = "joe";
$snoopy->pass = "bloe";

if($snoopy->fetch("http://www.slashdot.org/"))
{
	echo "response code: ".$snoopy->response_code."\n";
	while(list($key,$val) = each($snoopy->headers))
		echo $key.": ".$val."\n";
	echo "\n";

	echo "".htmlspecialchars($snoopy->results)."\n";
}
else
	echo "error fetching document: ".$snoopy->error."\n";

Example:	submit a form and print out the result headers
			and html-escaped page:

include "Snoopy.class.php";
$snoopy = new Snoopy;

$submit_url = "http://lnk.ispi.net/texis/scripts/msearch/netsearch.html";

$submit_vars["q"] = "amiga";
$submit_vars["submit"] = "Search!";
$submit_vars["searchhost"] = "Altavista";

if($snoopy->submit($submit_url,$submit_vars))
{
	while(list($key,$val) = each($snoopy->headers))
		echo $key.": ".$val."\n";
	echo "\n";

	echo "".htmlspecialchars($snoopy->results)."\n";
}
else
	echo "error fetching document: ".$snoopy->error."\n";

Example:	showing functionality of all the variables:

include "Snoopy.class.php";
$snoopy = new Snoopy;

$snoopy->proxy_host = "my.proxy.host";
$snoopy->proxy_port = "8080";

$snoopy->agent = "(compatible; MSIE 4.01; MSN 2.5; AOL 4.0; Windows 98)";
$snoopy->referer = "http://www.microsnot.com/";

$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.phpbuilder.com"))
{
	while(list($key,$val) = each($snoopy->headers))
		echo $key.": ".$val."\n";
	echo "\n";

	echo "".htmlspecialchars($snoopy->results)."\n";
}
else
	echo "error fetching document: ".$snoopy->error."\n";

Example: 	fetched framed content and display the results

include "Snoopy.class.php";
$snoopy = new Snoopy;

$snoopy->maxframes = 5;

if($snoopy->fetch("http://www.ispi.net/"))
{
	echo "".htmlspecialchars($snoopy->results[0])."\n";
	echo "".htmlspecialchars($snoopy->results[1])."\n";
	echo "".htmlspecialchars($snoopy->results[2])."\n";
}
else
	echo "error fetching document: ".$snoopy->error."\n";

Example:

# composer.json in Laravel
"files": [
	"vendor/geol/snoopy/Snoopy.class.php"
]

# ExampleClass.php
use geol\Snoopy\Snoopy as Snoopy;

class ExampleClass {
	function test {
		$url = 'https://www.example.com';
		$snoopy = new Snoopy();
		$snoopy->fetch($url);
	}
}

```

COPYRIGHT:

```
Copyright(c) 1999-2023 ispi. All rights reserved.
This software is released under the GNU General Public License.
Please read the disclaimer at the top of the Snoopy.class.php file.

```

THANKS: Special Thanks to:

```
- Peter Sorger  help fixing a redirect bug
- Andrei Zmievski  implementing time out functionality
- Patric Sandelin  help with fetchform debugging
- Carmelo  misc bug fixes with frames
- Geol	 fixing bugs

```

###  Health Score

24

—

LowBetter than 32% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity8

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity52

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 90% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

3

Last Release

1125d ago

Major Versions

v0.9.11 → v2.0.12023-04-19

### Community

Maintainers

![](https://www.gravatar.com/avatar/2e6cb424600f73b0a81019594371cdc915d1174195737906909e6cd25aa4bb75?d=identicon)[geol](/maintainers/geol)

---

Top Contributors

[![Geol2](https://avatars.githubusercontent.com/u/20119461?v=4)](https://github.com/Geol2 "Geol2 (9 commits)")[![endroy](https://avatars.githubusercontent.com/u/4599671?v=4)](https://github.com/endroy "endroy (1 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/geol-snoopy/health.svg)

```
[![Health](https://phpackages.com/badges/geol-snoopy/health.svg)](https://phpackages.com/packages/geol-snoopy)
```

###  Alternatives

[cerdic/css-tidy

CSSTidy is a CSS minifier

2092.0M6](/packages/cerdic-css-tidy)[lochmueller/calendarize

Create a structure for timely controlled tables (e.g. events) and one plugin for the different output of calendar views (list, detail, month, year, day, week...). The extension is shipped with one default event table, but you can also 'calendarize' your own table/model. It is completely independent and configurable! Use your own models as event items in this calender. Development on https://github.com/lochmueller/calendarize

77152.6k12](/packages/lochmueller-calendarize)[sitegeist/kaleidoscope

Responsive-images for Neos

29352.4k10](/packages/sitegeist-kaleidoscope)[jurchiks/numbers2words

It spells numbers (and currencies)!

20172.1k3](/packages/jurchiks-numbers2words)[giauphan/laravel-qr-code

QR Code Generator for PHP wrapper for Laravel

2765.4k1](/packages/giauphan-laravel-qr-code)[syholloway/mrcolor

Color manipulation tools and format conversion for PHP

14149.6k](/packages/syholloway-mrcolor)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
