使用httpclient实现网页自动登录
本帖最后由 star251314 于 2013-06-20 22:07:04 编辑 先说说问题,因为平时在屋里可以收到chinaunicom的无线网信号,免费使用而且网速还行,但有个问题就是每隔二十分钟就要掉次线(好像是联通故意的),不胜其烦啊,作为工科技术男就想着能不能自己解决这个问题,但无奈lz学通信的,对java、web什么的实在是不太懂,希望各位it高手能指点指点
目前我已经实现了自动检测网络状态,检测到掉线后自动重启无线网卡(因为每次只有禁用再启用无线网卡后才能再登陆账号,不知道什么原因),然后在网上找了个使用httpclient自动登录人人网的代码测试了下也能成功,但是我尝试如法炮制着去登陆联通账号网页的时候就是登不了,所以前来请教~
我能提供的一些参考:
1,联通账号登陆网址:http://wlan7.bj.chinaunicom.cn/index.jsp?basname=&setUserOnline=0&sap=
2,测试成功的人人网自动登录代码:
package test;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
//import org.apache.http.client.CookieStore;
import org.apache.http.cookie.Cookie;
public class Test{
public static void main(String[] args) throws ClientProtocolException,IOException{
String loginurl="http://www.renren.com/PLogin.do";
String username="*****@qq.com";
String password="*****";
System.out.println(Test.posturl(loginurl,username,password));
}
public static String posturl(String loginurl,String username,String
password) throws ClientProtocolException, IOException{
HttpClient httpclient1 = new DefaultHttpClient();
HttpPost httppost = new HttpPost(loginurl);
List<NameValuePair> formparams = new ArrayList<NameValuePair>();
formparams.add(new BasicNameValuePair("email",username));
formparams.add(new BasicNameValuePair("password",password));
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams,"utf-8");
httppost.setEntity(entity);
String str="";
HttpClient httpclient2=null;
try {
HttpResponse response1 = httpclient1.execute(httppost);
String login_success=response1.getFirstHeader("Location").getValue();//获取登陆成功之后跳转链接
System.out.println(login_success);
HttpGet httpget = new HttpGet(login_success);
httpclient2 = new DefaultHttpClient();
HttpResponse response2=httpclient2.execute(httpget);
str=EntityUtils.toString(response2.getEntity());
httppost.abort();
httpget.abort();
} finally{
httpclient1.getConnectionManager().shutdown();
httpclient2.getConnectionManager().shutdown();
}
return str;
}
}
3,使用的jar包您可以加我QQ412516590传给您,如果您不方便下载的话
4,如果您收不到chinaunicom的无线信号,你可能无法测试到连接成功,会返回提示信息“ip地址非法”,您可以将代码通过qq发给我来测试
第一次发帖求助,希望得到好心人指点,在此谢过,您最好加我的qq412516590交流~ Java web 自动登录 chinaunicom
[解决办法]
你要是真相写个客户端去自动链接人家的服务器,至少也该知道人家的端口和地址,不是网上看到别人给的人人代码没问题你这就没问题的
[解决办法]
我觉得,实现自动网站,并不是所有的情况下都适合。人人网能自动登录,可能是由于它开放了这个功能。其实人人网还开放API接口的,供程序员写应用程序,传送门。还有就是一些微博也提供开发api,比如新浪微博。
我认为大多数网站应该是不支持别人写程序达到自动登录的目的。一般网站的开发人会开发自动登录的功能,比如可以通过cookie实现一周内自动登录。能不能开发程序针对某个网站实现自动登录,要看这个网站本身是否允许。有一个针对form-auth的情况的自动登录,楼主不妨参考:http://www.iteye.com/topic/338230