这里我们具体讲讲如何使用snoopy来模拟登陆。
模拟登陆可以用curl或者socket来实现,当curl需要服务器相应的启用curl module,自己socket实现相对比较麻烦,使用snoopy就简单了很多啦。
在这里,我们使用喜悦国际村做为例子。(^_^,纯属研究)
首先,我们要获取到登陆需要发送什么字段,目标地址是什么。这里我们使用snoopy的fetchform来实现。
1<?
2include "Snoopy.class.php";
3$snoopy = new Snoopy;
4$snoopy->fetchform("http://www.phpx.com/happy/logging.php?action=login");
5print $snoopy->results;
6?>
7
2include "Snoopy.class.php";
3$snoopy = new Snoopy;
4$snoopy->fetchform("http://www.phpx.com/happy/logging.php?action=login");
5print $snoopy->results;
6?>
7
当然你也可以直接查看http://www.phpx.com/happy/logging.php?action=login的源代码来实现,不过这样更加方便把。这里,我们获取到目标和提交的数据,下一步就可以实现模拟登陆了。代码如下:
1<?
2include "Snoopy.class.php";
3$snoopy = new Snoopy;
4$submit_url = "http://www.phpx.com/happy/logging.php?action=login";
5
6 $submit_vars["loginmode"] = "normal";
7 $submit_vars["styleid"] = "1";
8 $submit_vars["cookietime"] = "315360000";
9 $submit_vars["loginfield"] = "username";
10 $submit_vars["username"] = "********"; //你的用户名
11 $submit_vars["password"] = "*******"; //你的密码
12 $submit_vars["questionid"] = "0";
13 $submit_vars["answer"] = "";
14 $submit_vars["loginsubmit"] = "提 交";
15 $snoopy->submit($submit_url,$submit_vars);
16 print $snoopy->results;
17
18?>
19
2include "Snoopy.class.php";
3$snoopy = new Snoopy;
4$submit_url = "http://www.phpx.com/happy/logging.php?action=login";
5
6 $submit_vars["loginmode"] = "normal";
7 $submit_vars["styleid"] = "1";
8 $submit_vars["cookietime"] = "315360000";
9 $submit_vars["loginfield"] = "username";
10 $submit_vars["username"] = "********"; //你的用户名
11 $submit_vars["password"] = "*******"; //你的密码
12 $submit_vars["questionid"] = "0";
13 $submit_vars["answer"] = "";
14 $submit_vars["loginsubmit"] = "提 交";
15 $snoopy->submit($submit_url,$submit_vars);
16 print $snoopy->results;
17
18?>
19
^_^,是不是显示你已经登陆了?使用snoopy就是这么简单!
fsockopen和curl都可以做php自动提交表单
1<?php
2/*-----------------------------------------------------------
3*功能:使用PHP socke 向指定页面提交数据
4*
5*作者:Honghe.c
6*
7*说明:post($url, $data)
8*
9* $url = 'http://www.xxx.com:8080/login.php';
10* $data[user] = 'hong';
11* $data[pass] = 'xowldo';
12* echo post($url, $data);
13*-----------------------------------------------------------*/
14
15function post($url, $data) {
16
17 $url = parse_url($url);
18 if (!$url) return "couldn't parse url";
19 if (!isset($url['port'])) { $url['port'] = ""; }
20 if (!isset($url['query'])) { $url['query'] = ""; }
21
22 $encoded = "";
23
24 while (list($k,$v) = each($data)) {
25 $encoded .= ($encoded ? "&" : "");
26 $encoded .= rawurlencode($k)."=".rawurlencode($v);
27 }
28
29 $fp = fsockopen($url['host'], $url['port'] ? $url['port'] : 80);
30 if (!$fp) return "Failed to open socket to $url[host]";
31
32 fputs($fp, sprintf("POST %s%s%s HTTP/1.0n", $url['path'], $url['query'] ? "?" : "", $url['query']));
33 fputs($fp, "Host: $url[host]n");
34 fputs($fp, "Content-type: application/x-www-form-urlencodedn");
35 fputs($fp, "Content-length: " . strlen($encoded) . "n");
36 fputs($fp, "Connection: closenn");
37
38 fputs($fp, "$encodedn");
39
40 $line = fgets($fp,1024);
41 if (!eregi("^HTTP/1.. 200", $line)) return;
42
43 $results = ""; $inheader = 1;
44 while(!feof($fp)) {
45 $line = fgets($fp,1024);
46 if ($inheader && ($line == "n" || $line == "rn")) {
47 $inheader = 0;
48 }
49 elseif (!$inheader) {
50 $results .= $line;
51 }
52 }
53 fclose($fp);
54
55 return $results;
56}
57
58/*
59$url = 'http://video.xxx.com:80/game_vm.php';
60$data['gid'] = '1';
61echo post($url, $data);
62*/
63
64?>
65
66Curl
67
68php Code:
69<?
70 $url = 'http://localhost/curl/result.php';
71 $params = "param=123¶m2=333"; //What will be posted
72 $user_agent = "Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)";
73 $ch = curl_init();
74 curl_setopt($ch, CURLOPT_POST,1);
75 curl_setopt($ch, CURLOPT_POSTFIELDS,$params);
76 curl_setopt($ch, CURLOPT_URL,$url);
77 curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
78 curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
79 $result=curl_exec ($ch); //execut
80 curl_close ($ch);
81 echo "Results: <br>".$result;
82?>
83
84result.php (just for test)
85<?
86print_r($_POST);
87?>
88
89
2/*-----------------------------------------------------------
3*功能:使用PHP socke 向指定页面提交数据
4*
5*作者:Honghe.c
6*
7*说明:post($url, $data)
8*
9* $url = 'http://www.xxx.com:8080/login.php';
10* $data[user] = 'hong';
11* $data[pass] = 'xowldo';
12* echo post($url, $data);
13*-----------------------------------------------------------*/
14
15function post($url, $data) {
16
17 $url = parse_url($url);
18 if (!$url) return "couldn't parse url";
19 if (!isset($url['port'])) { $url['port'] = ""; }
20 if (!isset($url['query'])) { $url['query'] = ""; }
21
22 $encoded = "";
23
24 while (list($k,$v) = each($data)) {
25 $encoded .= ($encoded ? "&" : "");
26 $encoded .= rawurlencode($k)."=".rawurlencode($v);
27 }
28
29 $fp = fsockopen($url['host'], $url['port'] ? $url['port'] : 80);
30 if (!$fp) return "Failed to open socket to $url[host]";
31
32 fputs($fp, sprintf("POST %s%s%s HTTP/1.0n", $url['path'], $url['query'] ? "?" : "", $url['query']));
33 fputs($fp, "Host: $url[host]n");
34 fputs($fp, "Content-type: application/x-www-form-urlencodedn");
35 fputs($fp, "Content-length: " . strlen($encoded) . "n");
36 fputs($fp, "Connection: closenn");
37
38 fputs($fp, "$encodedn");
39
40 $line = fgets($fp,1024);
41 if (!eregi("^HTTP/1.. 200", $line)) return;
42
43 $results = ""; $inheader = 1;
44 while(!feof($fp)) {
45 $line = fgets($fp,1024);
46 if ($inheader && ($line == "n" || $line == "rn")) {
47 $inheader = 0;
48 }
49 elseif (!$inheader) {
50 $results .= $line;
51 }
52 }
53 fclose($fp);
54
55 return $results;
56}
57
58/*
59$url = 'http://video.xxx.com:80/game_vm.php';
60$data['gid'] = '1';
61echo post($url, $data);
62*/
63
64?>
65
66Curl
67
68php Code:
69<?
70 $url = 'http://localhost/curl/result.php';
71 $params = "param=123¶m2=333"; //What will be posted
72 $user_agent = "Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)";
73 $ch = curl_init();
74 curl_setopt($ch, CURLOPT_POST,1);
75 curl_setopt($ch, CURLOPT_POSTFIELDS,$params);
76 curl_setopt($ch, CURLOPT_URL,$url);
77 curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
78 curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
79 $result=curl_exec ($ch); //execut
80 curl_close ($ch);
81 echo "Results: <br>".$result;
82?>
83
84result.php (just for test)
85<?
86print_r($_POST);
87?>
88
89
PS:1.You can download Curl library in http://pear.php.net
2.You can open the "php.ini" and search "extension=php_curl.dll".Then delete semicolon at this line.
使用snoopy提交数据实现登陆
原文地址:http://www.phpobject.net/blog/read.php/91.htm
下载地址: Snoopy 1.2.3
首先,我们要获取到登陆需要发送什么字段,目标地址是什么。这里我们使用snoopy的fetchform来实现。
1<?
2include "Snoopy.class.php";
3$snoopy = new Snoopy;
4$snoopy->fetchform("http://www.phpx.com/happy/logging.php?action=login");
5print $snoopy->results;
6?>
7
2include "Snoopy.class.php";
3$snoopy = new Snoopy;
4$snoopy->fetchform("http://www.phpx.com/happy/logging.php?action=login");
5print $snoopy->results;
6?>
7
当然你也可以直接查看http://www.phpx.com/happy/logging.php?action=login的源代码来实现,不过这样更加方便把。这里,我们获取到目标和提交的数据,下一步就可以实现模拟登陆了。代码如下:
1<?
2include "Snoopy.class.php";
3$snoopy = new Snoopy;
4$submit_url = "http://www.phpx.com/happy/logging.php?action=login";
5
6 $submit_vars["loginmode"] = "normal";
7 $submit_vars["styleid"] = "1";
8 $submit_vars["cookietime"] = "315360000";
9 $submit_vars["loginfield"] = "username";
10 $submit_vars["username"] = "********"; //你的用户名
11 $submit_vars["password"] = "*******"; //你的密码
12 $submit_vars["questionid"] = "0";
13 $submit_vars["answer"] = "";
14 $submit_vars["loginsubmit"] = "提 交";
15 $snoopy->submit($submit_url,$submit_vars);
16 print $snoopy->results;
17
18?>
2include "Snoopy.class.php";
3$snoopy = new Snoopy;
4$submit_url = "http://www.phpx.com/happy/logging.php?action=login";
5
6 $submit_vars["loginmode"] = "normal";
7 $submit_vars["styleid"] = "1";
8 $submit_vars["cookietime"] = "315360000";
9 $submit_vars["loginfield"] = "username";
10 $submit_vars["username"] = "********"; //你的用户名
11 $submit_vars["password"] = "*******"; //你的密码
12 $submit_vars["questionid"] = "0";
13 $submit_vars["answer"] = "";
14 $submit_vars["loginsubmit"] = "提 交";
15 $snoopy->submit($submit_url,$submit_vars);
16 print $snoopy->results;
17
18?>