1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Java实现百度贴吧自动签到器

Java实现百度贴吧自动签到器

时间:2019-03-03 23:50:24

相关推荐

Java实现百度贴吧自动签到器



出处/zhongkejingwang/article/details/39995909

前段时间经常逛贴吧,每次都要手动签到,有时候也会忘记签到,很麻烦。于是就想用Java写个自动签到的工具并部署到实验室的服务器上,这样就可以常年自动签到了。于是就有了这篇文章,权当玩玩。

看一下程序的执行情况:

将此程序放到服务器后台运行就可以了,不用再担心断签~

要签到首先要登录然后再获取贴吧页面里的签到链接。由于Java自带的http的API使用起来很不方便,这里使用的是Apache的httpclient(只用到了三个jar包,后面会提供下载),用post方法提交表单数据即可,关于表单的item参数可以用chrome浏览器抓包分析一下(按F12)。登录地址选择百度的手机网页端:/passport/login这个地址,这样的话服务器端识别为手机签到,可以加分。在代码中将用户名和密码提交到这个地址即可,在去年的时候抓包分析过这个页面提交的数据还是明文的....现在已经升级了,网页是经过加密后提交的密码,不过明文提交还是可以登录。

登录完了需要获取贴吧首页中用户关注的所有贴吧,在这个地址/mo,获取网页特定内容需要用到html解析工具,这里使用的是Jsoup,可以在这里看使用教程http://www.open-/jsoup/

获取到关注贴吧的首页然后把该贴吧的html页面拉下来一份,检索看看有没有包含“sign”字符串,没有表示已经签到了;有则获取对应的签到地址,访问改地址即可签到成功。

关于添加依赖包:在eclipse中右键工程—>属性—>Java 构建路径—>库(L)里添加外部JAR,就可以了。

关于怎么打包成可执行的jar包:这里有依赖的jar包,建议将依赖的jar包一块打包进去,可以使用eclipse打包,具体步骤:

右键工程—>导出—>Java—>可运行的jar包,点击下一步,在接下来的选项中选择Package required libraries into generated JAR:

这样就可以很方便的把jar包上传到服务器执行了。否则手动打包需要写MANIFEST.MF清单文件,指定Class-Path,指向所有依赖包,否则运行时找不到依赖包,比较麻烦。所以还是建议用eclipse打包吧。。。

过程讲完了可以讲代码了。写一个SignUpTool接口:

[java]view plaincopypackagecom.jingchen.util; publicinterfaceSignUpTool{ /** *用户登录 * *@paramusername *用户名 *@parampasswd *密码 *@return登录成功返回true,失败则返回false */ booleanlogin(Stringusername,Stringpasswd); /** *签到 * *@return签到成功返回true,失败则返回falses */ booleansignUp(); } 接口包含了登录和签到方法,此接口不同的实现可以登录不同的网站。

写一个HttpUtil,封装post和get操作:

[java]view plaincopypackagecom.jingchen.util; importjava.io.IOException; importorg.apache.http.HttpEntity; importorg.apache.http.HttpResponse; importorg.apache.http.client.ClientProtocolException; importorg.apache.http.client.CookieStore; importorg.apache.http.client.HttpClient; importorg.apache.http.client.methods.HttpGet; importorg.apache.http.client.methods.HttpPost; importorg.apache.http.client.protocol.ClientContext; importorg.apache.http.impl.client.BasicCookieStore; importorg.apache.http.impl.client.DefaultHttpClient; importorg.apache.http.protocol.BasicHttpContext; importorg.apache.http.protocol.HttpContext; importorg.apache.http.util.EntityUtils; publicclassHttpUtil{ privateHttpClientmHttpClient; privateCookieStoremCookieStore; privateHttpContextmContext; privateHttpPostpost; privateHttpGetget; publicHttpUtil(){ mHttpClient=newDefaultHttpClient(); mCookieStore=newBasicCookieStore(); mContext=newBasicHttpContext(); } publicHttpResponsepost(Stringurl,HttpEntityhe) throwsClientProtocolException,IOException{ post=newHttpPost(url); post.setEntity(he); mContext.setAttribute(ClientContext.COOKIE_STORE,mCookieStore); HttpResponsehr=mHttpClient.execute(post,mContext); returnhr; } publicStringget(Stringurl)throwsClientProtocolException,IOException{ Stringresult=null; get=newHttpGet(url); HttpResponsehr=mHttpClient.execute(get,mContext); result=EntityUtils.toString(hr.getEntity()); returnresult; } }

实现SignUpTool接口的BaiduSignUp:

[java]view plaincopypackagecom.jingchen.util; importjava.util.ArrayList; importjava.util.List; importorg.apache.http.HttpEntity; importorg.apache.http.HttpResponse; importorg.apache.http.NameValuePair; importorg.apache.http.client.entity.UrlEncodedFormEntity; importorg.apache.http.message.BasicNameValuePair; importorg.apache.http.util.EntityUtils; importorg.jsoup.Jsoup; importorg.jsoup.nodes.Document; importorg.jsoup.nodes.Element; importorg.jsoup.select.Elements; /** *用于登录百度贴吧账号并签到的类 * *@authorjingchen * */ publicclassBaiduSignUpimplementsSignUpTool{ //登录链接 privateStringmLoginUrl=null; //登录后跳转的页面 privateStringmIndexUrl=null; //获取网页中的相对路径拼接上这个头部构成完整请求路径 privateStringmUrlHead=null; //是否需要验证码 privatebooleanisAuth=false; privateHttpUtilhttpUtil; //关注的贴吧 privateList<String>mLikeBars; //关注的贴吧首页 privateList<String>mLikeBarsUrls; publicBaiduSignUp(){ mLikeBars=newArrayList<String>(); mLikeBarsUrls=newArrayList<String>(); httpUtil=newHttpUtil(); mLoginUrl="/passport/login"; mIndexUrl="/mo"; mUrlHead=""; } publicbooleanlogin(Stringusername,Stringpasswd){ isAuth=false; mLikeBars.clear(); mLikeBarsUrls.clear(); print("login..."); List<NameValuePair>params=newArrayList<NameValuePair>(); params.add(newBasicNameValuePair("username",username)); params.add(newBasicNameValuePair("password",passwd)); HttpEntityhe; try{ he=newUrlEncodedFormEntity(params,"UTF-8"); HttpResponsehr=httpUtil.post(mLoginUrl,he); Stringfirstresult=EntityUtils.toString(hr.getEntity()); if(firstresult.contains("verifycode")){ //在异地登录或者登录频繁会出现验证码 isAuth=true; print("需要验证码"); returnfalse; }elseif(firstresult.contains("error_area")){ print("密码错误"); returnfalse; } }catch(Exceptione){ e.printStackTrace(); returnfalse; } print("登录成功"); returntrue; } publicbooleansignUp(){ if(isAuth){ print("需要验证码"); returnfalse; } print("signUp..."); if(mLikeBars.size()!=0){ mLikeBars.clear(); mLikeBarsUrls.clear(); } if(!getLikeBars()) returnfalse; try{ for(inti=0;i<mLikeBars.size();i++){ Stringbarview=getWebContent(mLikeBarsUrls.get(i)); if(!barview.contains("sign")) print(mLikeBars.get(i)+"已签到"); else{ Elementssignurl=Jsoup.parse(barview) .getElementsByAttributeValueMatching("href", ".*sign.*"); getWebContent(mUrlHead+signurl.attr("href")); print(mLikeBars.get(i)+"签到成功"); } } }catch(Exceptione){ e.printStackTrace(); print("failinsignUp!"); returnfalse; } returntrue; } /** *获取关注的贴吧 * *@return */ privatebooleangetLikeBars(){ print("getLikeBars..."); Stringindexresult=getWebContent(mIndexUrl); if(indexresult==null) returnfalse; Documentdocument=Jsoup.parse(indexresult); Elementslikebars=document.select("div.my_love_bara"); for(Elemente:likebars){ mLikeBarsUrls.add(mUrlHead+e.attr("href")); mLikeBars.add(e.text()); } if(mLikeBars.size()==0) returnfalse; returntrue; } /** *获取网页内容 * *@paramurl *链接地址 *@return网页内容 */ privateStringgetWebContent(Stringurl){ print("getWebContent..."); Stringresult=null; try{ result=httpUtil.get(url); }catch(Exceptione){ e.printStackTrace(); returnnull; } returnresult; } publicvoidprint(Strings){ System.out.println(s); } } 包含main方法的主类:[java]view plaincopypackagecom.jingchen.main; importcom.jingchen.util.BaiduSignUp; importcom.jingchen.util.SignUpTool; publicclassMainClass{ publicstaticStringusername="******"; publicstaticStringpasswd="******"; publicstaticintmInterval=30; publicstaticvoidmain(String[]args){ booleanisSignup=false; booleanisLogin=false; SignUpTooltool=newBaiduSignUp(); //SignUpTooltool=newBBSLogin(); while(true){ try{ isLogin=tool.login(username,passwd); isSignup=tool.signUp(); if(isLogin&&isSignup){ //签到成功则三小时后再签到 System.out.println("continueafterthreehours..."); Thread.sleep(3*60*60*1000); }else{ //签到失败则30分钟后再次签到 System.out.println("continueafter"+mInterval +"minites..."); Thread.sleep(mInterval*60*1000); } }catch(Exceptione){ e.printStackTrace(); } } } } 每次签到前都先登录,签到失败则等半小时再尝试,签到成功则等待3小时再次签到。将用户名和密码填上就可以了。

就这么多了,不保证百度后台升级后程序会一直有效。

源码下载

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。