这里我们具体讲讲如何使用snoopy来模拟登陆。
模拟登陆可以用curl或者socket来实现,当curl需要服务器相应的启用curl module,自己socket实现相对比较麻烦,使用snoopy就简单了很多啦。
在这里,我们使用喜悦国际村做为例子。(^_^,纯属研究)
首先,我们要获取到登陆需要发送什么字段,目标地址是什么。这里我们使用snoopy的fetchform来实现。
1
<?
2
include "Snoopy.class.php";
3
$snoopy = new Snoopy;
4
$snoopy->fetchform("http://www.phpx.com/happy/logging.php?action=login");
5
print $snoopy->results;
6
?>
7
2
3
4
5
6
7
当然你也可以直接查看http://www.phpx.com/happy/logging.php?action=login的源代码来实现,不过这样更加方便把。这里,我们获取到目标和提交的数据,下一步就可以实现模拟登陆了。代码如下:
1
<?
2
include "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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
15
function 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';
61
echo post($url, $data);
62
*/
63
64
?>
65
66
Curl
67
68
php 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
84
result.php (just for test)
85
<?
86
print_r($_POST);
87
?>
88
89
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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
<?
2
include "Snoopy.class.php";
3
$snoopy = new Snoopy;
4
$snoopy->fetchform("http://www.phpx.com/happy/logging.php?action=login");
5
print $snoopy->results;
6
?>
7
2
3
4
5
6
7
当然你也可以直接查看http://www.phpx.com/happy/logging.php?action=login的源代码来实现,不过这样更加方便把。这里,我们获取到目标和提交的数据,下一步就可以实现模拟登陆了。代码如下:
1
<?
2
include "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
?>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18