锁定老帖子 主题:一个简单的投票机
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-09-05
最后修改:2010-09-05
刚才无意间看到一个投票,在页面右键,源码,看了下,就几个字段,很简单。
打开eclipse,操上httpclient模拟下,就可以投票了。
然后循环,,,, 发现“对不起,您已经提交了”。加了验证,没有登录可以提交,过了会刷页面还是可以提交。 说明不是通过ip控制了,那就是用ip+时间控制的了。
试了下,10s的延时可以,9s都貌似不行。
投票地址: http://page.vote.qq.com/?id=141068&result=yes
投票代码: import java.io.IOException; import java.io.UnsupportedEncodingException; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.cookie.CookiePolicy; import org.apache.commons.httpclient.methods.PostMethod; public class QQVoteGuomei { private static String VOTE_SHOW = "http://page.vote.qq.com/?id=141068&result=yes"; private static String VOTE = "http://input.vote.qq.com/survey.php"; /** * @param args * @throws IOException * @throws HttpException * @throws InterruptedException */ public static void main(String[] args) throws HttpException, IOException, InterruptedException { // TODO Auto-generated method stub //int count = 10000000; //for (int i = 0; i < count; i++) { int i = 1; while(true){ System.out.println("==> 第 " + i++ +" 次投票."); vote(); //if(i < count - 1) Thread.sleep(10000); } //} } private static void vote() throws IOException, HttpException, UnsupportedEncodingException { HttpClient client = new HttpClient(); client.getParams().setCookiePolicy(CookiePolicy.IGNORE_COOKIES); PostMethod post = new PostMethod(VOTE); post .addRequestHeader( "User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; CIBA; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; msn OptimizedIE8;ZHCN)"); post.addRequestHeader("Host", "page.vote.qq.com:80"); post.setRequestHeader("Referer", VOTE_SHOW); NameValuePair[] nvp = new NameValuePair[5]; // <input type="hidden" name="PjtID" value="141068" > // <input type="hidden" name="result" value="0" > nvp[0] = new NameValuePair("PjtID", "141068"); nvp[1] = new NameValuePair("result", "0"); nvp[2] = new NameValuePair("sbj_361707[]", "25593"); nvp[3] = new NameValuePair("sbj_361708[]", "25596"); nvp[4] = new NameValuePair("sbj_361709[]", "25598"); post.setRequestBody(nvp); // 使用POST方式提交数据 int statusCode = client.executeMethod(post); System.out.println("statusCode : " + statusCode); if (statusCode == 200) { if (post.getResponseBody() != null) { String response1String = new String(post.getResponseBody(),"gbk"); System.out.println(response1String); } } } }
输出: ==> 第 1 次投票. ........
--------------------------------------------------------------------------
一般的灌水机,投票机,注册机大概就是这个样子的: 1\分页页面表单元素 2\分析页面跳转流程 3\ 获取和分析验证码 4、模拟表单提交 5、保持cookie 6、执行操作 7、分析返回结果
这个周末在研究爬虫,自动登录,验证码破解之类的东西。 有志同道合的可以给我交流。做了一些复杂的,有针对性的东西。 这里就不方便具体说了。私下交流。
--------------------------------------------------------------------------- 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-09-05
版大你好,請問一下
2分析页面跳转流程 ----> 這個页面跳转流程是否就是用 post.setRequestHeader("Referer", VOTE_SHOW); 來告訴QQVoteGuomei程序做完post動作之後 應該會跳到哪一頁嗎 我一直以為是程序做完post動作送出後,server 會給我們一個request裡面會有 跳转页面(之前並不知道要自已指定) |
|
返回顶楼 | |
发表时间:2010-09-05
javaboyzzz 写道 版大你好,請問一下 2分析页面跳转流程 ----> 這個页面跳转流程是否就是用 post.setRequestHeader("Referer", VOTE_SHOW); 來告訴QQVoteGuomei程序做完post動作之後 應該會跳到哪一頁嗎 我一直以為是程序做完post動作送出後,server 會給我們一個request裡面會有 跳转页面(之前並不知道要自已指定) post以后如果跳转,比如登录操作, 服务器端返回301或302,在header的location指定客户端浏览器要跳转的地址 然后写个GetMethod获取这个地址的内容即可。 referer一般是你从A页面点击或操作,跳转或弹出B页面, 浏览器请求B页面时,会在http头添加一个referer,内容是A的地址。 很多时候这个被用来防盗链或是非法提交。 可以在自己写的http请求里,加上referer即可。 |
|
返回顶楼 | |
发表时间:2010-09-05
发垃圾和反垃圾的人,都很纠结
|
|
返回顶楼 | |
发表时间:2010-09-05
发垃圾和反垃圾的人,都很纠结
|
|
返回顶楼 | |
发表时间:2010-09-06
beneo 写道 发垃圾和反垃圾的人,都很纠结
完全同意 |
|
返回顶楼 | |
发表时间:2010-09-07
建议不要用java搞
|
|
返回顶楼 | |
发表时间:2010-09-07
呵呵,以前也做过这事,帮同学投票,一个IP最多只能能投一票,后来我写了个爬虫在网上到处找代理,通过给HttpClient对象设置代理来投。可以试试。
|
|
返回顶楼 | |
发表时间:2010-09-07
后来还用HttpClient3做过项目,当时HttpClient4还在Beta阶段,访问量一大的时候HttpClient3经常会发生cookie丢失的情况,导致用户要重新登录。拼命看HttpClient3.0源码,最后给我改得乱七八糟的,实在是受不了了,后来我自己用java api里的URLConnection写了一个很简洁的HttpClient,试了下速度还稍微要快点。咱不是发明轮子,适用就行,虽然官方的有好多的特性,比如自动帮忙处理302等等,可我用不着,简单就好。
验证码最初的时候是破解那种静态的,就是位置固定、形状固定的,再后来研究出一个算法可以匹配位置不固定,变形别太厉害的,不过识别率达不到百分百。哈哈 |
|
返回顶楼 | |
发表时间:2010-09-07
反爬最简单的方式就是偷偷在页面执行一段javascript,然后这段js上写上一些浏览器的native方法,成功的话生成一个跟native相关的一些操作生成的字符串,然后设置为cookie,以后的请求检查这个cookie,如没有可以断定为爬虫。这年头估计没人会禁止浏览器的js上网吧。
native方法就是跟浏览器相关的代码 |
|
返回顶楼 | |