代码如下,就是无法通过验证,我也知道是base64的编码,密码也知道,可就是没法进入,卡了两天了
import java.io.IOException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
public class restartRouter {
public static void main(String[] args){
//"http://192.168.1.1/userRpm/SysRebootRpm.htm?Reboot=重启路由器";
// 验证的用户名和密码
String login_user = "admin";
String login_pw = "123456";
String auth = "Basic " + getBASE64(login_user + login_pw);
System.out.println(auth);
HttpClient httpClient = new DefaultHttpClient();
HttpUriRequest request= new HttpGet("http://192.168.1.1/userRpm/SysRebootRpm.htm?Reboot=重启路由器");
//HttpUriRequest request= new HttpGet("http://192.168.1.1/userRpm/StatusRpm.htm?Disconnect=断线&wan=1");
//HttpUriRequest request= new HttpGet("http://192.168.1.1/userRpm/StatusRpm.htm?Connect=连接&wan=1");
//http://192.168.1.1/userRpm/StatusRpm.htm?Disconnect=断线&wan=1
//添加验证信息
request.addHeader("Authorization", auth);
// 打印请求信息
try {
// 发送请求,返回响应
HttpResponse response = httpClient.execute(request);
HttpEntity httpEntity = response.getEntity();
String result = EntityUtils.toString(httpEntity);
// 打印响应信息
System.out.println(result);
} catch (ClientProtocolException e) {
// 协议错误
e.printStackTrace();
} catch (IOException e) {
// 网络异常
e.printStackTrace();
}
}
public static String getBASE64(String s) {
if (s == null) return null;
return (new sun.misc.BASE64Encoder()).encode( s.getBytes() );
}
}
不太清楚你要操作的是什么路由器,不过思路应该不难。
1、模拟登录,获取登录后的cookie.
2、带着得到的cookie请求需要的操作。
这里你把登录账号和密码直接用base64编码传过去,应该是不成的。给你一个小例子:
package com.daidai.util;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.jsoup.Connection.Method;
import org.jsoup.Connection.Response;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class JsoupUtil {
// 登录获取到的cookie
static Map<String, String> cookieMap = new HashMap<String, String>();
/**
* @param uri
* @param paramsMap form表单中的参数和值
* @return
*/
public static boolean login(String uri, Map<String, String> paramsMap){
boolean loginFlag = false;
Response response = null;
try {
response = Jsoup.connect(uri)
.userAgent("Mozilla")
.data(paramsMap)
.method(Method.POST)
.timeout(20000)
.execute();
if (response.statusCode() == 200) {
cookieMap = response.cookies();
loginFlag = true;
}
} catch (IOException e) {
e.printStackTrace();
}
return loginFlag;
}
/**
* 提交评论内容
* @param url
* @param params 封装的参数
*/
public static void doPost(String uri, Map<String,String> paramsMap){
Response response = null;
try {
response = Jsoup.connect(uri)
.userAgent("Mozilla/5.0")
.data(paramsMap)
.method(Method.POST)
.timeout(20000)
.cookies(cookieMap)
.ignoreContentType(true)
.execute();
if (response.statusCode() == 200) {
System.out.println("评论成功!");
} else{
System.out.println("评论失败!(HTTP CODE:"+response.statusCode()+")");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
登录操作:
System.out.println("正在进行登录......");
Map<String, String> paramsMap = JsoupUtil.getParamsMap();
paramsMap.put("username", userName);
paramsMap.put("password", password);
boolean flag = JsoupUtil.login("**********", paramsMap);
if(flag){
System.out.println("登录成功!");
}else{
System.out.println("登录失败请重新进行登录!");
login();
}