请问php通过curl如何模拟登陆阿里妈妈呢?

2013-12-09 20:54:19 +08:00
 lusin
登陆的时候提示:超人,您提交的页面已过期,请重新输入提交
以下是我写的模拟登陆代码,技术比较菜,勿笑,请问有什么问题呢?
public function curl(){
$url='https://www.alimama.com/member/minilogin_act.htm';
$url2='http://www.alimama.com/member/minilogin.htm';
$data['_tb_token_']=$this->g($url2);
$data['style']='';
$data['redirect']='';
$data['proxy']='http://www.alimama.com/proxy.htm';
$data['logname']='aaaaaa;
$data['originalLogpasswd']='bbbbb';
$data['logpasswd']='567aassssssssssssssssssssssss0f4';
$fields=array_map('urlencode', $data);
$cookie_file = "d:\cookie.txt";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/25.0');
curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
}
8726 次点击
所在节点    PHP
15 条回复
loveminds
2013-12-09 22:48:29 +08:00
可能限制了模拟登录吧
hitsmaxft
2013-12-10 00:09:45 +08:00
作弊检测很严格的...
bombless
2013-12-10 00:21:07 +08:00
这……前几行引号不全,后面$url和$url2也没用到……
ETiV
2013-12-10 02:28:11 +08:00
http referer?
bsbgong
2013-12-10 08:47:56 +08:00
提示你过期,能想到两个可能:
1. 你的请求缺失某个隐藏域;
2. token验证过期
一般模拟登录都不是这么简单实现了,光一个令牌验证就能把你过滤了。
要使用一些库来模拟,比如apache httpclient:http://hc.apache.org/httpcomponents-client-4.3.x/index.html
anewg
2013-12-10 09:43:09 +08:00
注意 refer 和隐藏表单的 token。

或者换个思路 参考我这篇博客 http://blog.segmentfault.com/pcp/1190000000341558
xoxo
2013-12-10 11:27:27 +08:00
淘宝全线产品均不可程序模拟登录,有严格的各种防机器校验
lusin
2013-12-10 12:48:47 +08:00
@bombless 哦,那个url2是另一个方法获取tb_token用的,引号应该不少吧:)
lusin
2013-12-10 12:49:22 +08:00
@ETiV 这个加上了也是一样的结果
lusin
2013-12-10 12:53:39 +08:00
@bombless 少的引号是发贴时改用户名密码时丢的,应该不是这个问题,主要可能就是模拟登陆比这个复杂的多,这个只能登陆非常简单的网站
thursday
2013-12-10 21:28:12 +08:00
还是用浏览器模拟吧
54dev
2014-08-19 18:21:38 +08:00
@anewg 看了你写的demo,想请问一下,这个php库里好像没有获取源码的方法?
anewg
2014-08-19 19:09:43 +08:00
@54dev 可以试试 $elements = $session->element('css selector', 'body')->text(); 如果不行的话查下selenium的文档,应该是有的。我太久没用忘的差不多了
54dev
2014-08-20 11:24:07 +08:00
@anewg $elements = $session->element('css selector', 'body')->text();是获取所有文本,我用的是和你一样php库,那个库里好像没有获取源码的方法。
awobaba
2017-03-10 15:15:13 +08:00
PHP 不行,获取不到完整的 session 。 需要配合软件来使用,我有 C#编写的程序,软件内建了 API ,可供 PHP 等其他程序调用. Q 23360598

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/92452

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX