您的位置:首页 > 运维架构 > 网站架构

PHP使用CURL对带有验证码的网站进行模拟登录

2014-09-28 13:19 761 查看

在网上查了一些别人写的模拟登录程序,好多都是通过服务程序apache什么的运行,获取到验证码之后显示在网页上,然后填上再POST出去,这样虽然看起来很友好,但是既然模拟登录,登录后所干的事情就不一定是短时间完成的,所以这就要受到php最大执行时间的限制,而且有些操作还有可能权限不足。我写了一个,思路就是获取到验证码之后把验证码存储为一个图片,然后程序休眠20秒,在20秒之后由用户手动查看图片,并把验证码填写到code.txt文件中,20秒休眠完成后,程序会读code.txt的验证码,这样再带着验证码进行登录操作。代码如下:

view
source

print?

01
/**
02
*
模拟登录
03
*
Designbymaben
04
*
www.maben.com.cn
05
*/
06
07
//初始化变量
08
$cookie_file
=
"tmp.cookie"
;
09
$login_url
=
"http://xxx.com/logon.php"
;
10
$verify_code_url
=
"http://xxx.com/verifyCode.php"
;
11
12
echo
"正在获取COOKIE...\n"
;
13
$curlj
=
curl_init();
14
$timeout
=
5;
15
curl_setopt(
$curl
,
CURLOPT_URL,
$login_url
);
16
curl_setopt(
$curl
,
CURLOPT_RETURNTRANSFER,1);
17
curl_setopt(
$curl
,
CURLOPT_CONNECTTIMEOUT,
$timeout
);
18
curl_setopt(
$curl
,CURLOPT_COOKIEJAR,
$cookie_file
);
//获取COOKIE并存储
19
$contents
=
curl_exec(
$curl
);
20
curl_close(
$curl
);
21
22
echo
"COOKIE获取完成,正在取验证码...\n"
;
23
//取出验证码
24
$curl
=
curl_init();
25
curl_setopt(
$curl
,
CURLOPT_URL,
$verify_code_url
);
26
curl_setopt(
$curl
,
CURLOPT_COOKIEFILE,
$cookie_file
);
27
curl_setopt(
$curl
,
CURLOPT_HEADER,0);
28
curl_setopt(
$curl
,
CURLOPT_RETURNTRANSFER,1);
29
$img
=
curl_exec(
$curl
);
30
curl_close(
$curl
);
31
32
$fp
=
fopen
(
"verifyCode.jpg"
,
"w"
);
33
fwrite(
$fp
,
$img
);
34
fclose(
$fp
);
35
echo
"验证码取出完成,正在休眠,20秒内请把验证码填入code.txt并保存\n"
;
36
//停止运行20秒
37
sleep(20);
38
39
echo
"休眠完成,开始取验证码...\n"
;
40
$code
=
file_get_contents
(
"code.txt"
);
41
echo
"验证码成功取出:$code\n"
;
42
echo
"正在准备模拟登录...\n"
;
43
44
$post
=
"username=maben&pwd=hahahaha&verifycode=$code"
;
45
$curl
=
curl_init();
46
curl_setopt(
$curl
,
CURLOPT_URL,
$url
);
47
curl_setopt(
$curl
,
CURLOPT_HEADER,false);
48
curl_setopt(
$curl
,
CURLOPT_RETURNTRANSFER,1);
49
curl_setopt(
$curl
,
CURLOPT_POSTFIELDS,
$post
);
50
curl_setopt(
$curl
,
CURLOPT_COOKIEFILE,
$cookie_file
);
51
$result
=curl_exec(
$curl
);
52
curl_close(
$curl
);
53
54
//这一块根据自己抓包获取到的网站上的数据来做判断
55
if
(substr_count(
$result
,
"登录成功"
)){
56
echo
"登录成功\n"
;
57
}
else
{
58
echo
"登录失败\n"
;
59
exit
;
60
}
61
62
//啦啦啦,开始做你想做的事吧。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: