java httpclient-使用java登陆路由器并实现它的重启

作者:用户 来源:互联网 浏览:1126 次 时间:2016-06-30 19:09:53

java httpclient

java httpclient-使用java登陆路由器并实现它的重启 - 摘要: 使用java登陆路由器并实现它的重启代码如下,就是无法通过验证,我也知道是base64的编码,密码也知道,可就是没法进入,卡了两天了importjava.io.IOException;importor

问题描述

使用java登陆路由器并实现它的重启

代码如下,就是无法通过验证,我也知道是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();
        }
解决方案二:

java 重启路由器
使用c#实现简单的路由器重启功能

【云栖快讯】你想见的Java技术专家都在这了,向大佬提问,有问题必答  详情请点击
云栖社区(yq.aliyun.com)为您免费提供java httpclient-使用java登陆路由器并实现它的重启相关信息,包括 java httpclient 的信息 ,所有java httpclient-使用java登陆路由器并实现它的重启相关内容均不代表云栖社区的意见! 该页面h5页面的地址是:https://m.aliyun.com/yunqi/wenzhang/show_26669,您可以点击java httpclient-使用java登陆路由器并实现它的重启-手机站访问。
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率

40+云计算产品,6个月免费体验

现在注册,免费体验40+云产品,及域名优惠!

云服务器9.9元/月,大学必备

热点导航