zoukankan      html  css  js  c++  java
  • HttpClient(JAVA)使用笔记

    HTTPCLIENT 

      此工具是由apache基金会支持开发的一套 开源 http client 组件, 目前属于 http components的一部分,

    官网:http://hc.apache.org/index.html

      http components 健壮地实现了基础HTTP部分, 并可以被扩展, 可以被 客户端和服务器端 HTTP 应用程序使用, 例如  浏览器 爬虫 代理 和 web service, 以及利用和扩展http协议用于分布式通信的系统。

      http components包括:

      -- http core 实现了http基础协议,包括客户端和服务器端,可以定制阻塞 和 非阻塞模式, 非阻塞模式对网络吞吐量有利,非阻塞模式对数据密集情况有利。

      -- http client 基于http core实现遵守http1.1的协议,还包括客户端认证、状态管理和连接管理。

      -- http asyncclient, 基于上面两个,实现非阻塞模式的客户端, 有利吞吐量。

      本文以 http client作为研究对象,

    http client总体文档 http://hc.apache.org/httpcomponents-client-4.3.x/index.html

    API http://hc.apache.org/httpcomponents-client-4.3.x/tutorial/html/index.html

    有很多例子可供参考 http://hc.apache.org/httpcomponents-client-ga/examples.html

    实验-目的

      通过http client工具, 登陆路由器,重启系统(网速很慢的时候, 重启下路由器,希望能快点),要求能够检测启动中和启动完毕。 

    实验-步骤

      1、 下载 http client(httpcomponents-client-4.3.3-bin.tar.gz)

        http://mirrors.cnnic.cn/apache//httpcomponents/httpclient/binary/httpcomponents-client-4.3.3-bin.zip

      2、eclipse新建一个工程(httpclient),

      创建一个包(org.apache.http.examples.client),

      创建一个类(ClientAuthentication)。

      3、导入 http client 压缩包, 并将压缩包中的lib文件下的所有jar文件,添加为user libraries。

      4、参考 examples.html 上的 basic 登陆例子,实现登陆, 并发起重启报文, 然后再启动子进程发送ping诊断检测设备启动过程。

    代码

    package org.apache.http.examples.client;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    
    import org.apache.http.auth.AuthScope;
    import org.apache.http.auth.UsernamePasswordCredentials;
    import org.apache.http.client.CredentialsProvider;
    import org.apache.http.client.methods.CloseableHttpResponse;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.BasicCredentialsProvider;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.util.EntityUtils;
    
    /**
     * A simple example that uses HttpClient to execute an HTTP request against
     * a target site that requires user authentication.
     */
    public class ClientAuthentication {
    
        public static void main(String[] args) throws Exception {
            CredentialsProvider credsProvider = new BasicCredentialsProvider();
            credsProvider.setCredentials(
                    new AuthScope("192.168.1.1", 80),
                    new UsernamePasswordCredentials("username", "password"));
            CloseableHttpClient httpclient = HttpClients.custom()
                    .setDefaultCredentialsProvider(credsProvider)
                    .build();
            try {
                //HttpGet httpget = new HttpGet("http://192.168.1.1/");
                HttpGet httpget = new HttpGet("http://192.168.1.1/userRpm/SysRebootRpm.htm?Reboot=%D6%D8%C6%F4%CF%B5%CD%B3");
    
                
                System.out.println("Executing request " + httpget.getRequestLine());
                CloseableHttpResponse response = httpclient.execute(httpget);
                try {
                    System.out.println("----------------------------------------");
                    System.out.println(response.getStatusLine());
                    EntityUtils.consume(response.getEntity());
                } finally {
                    response.close();
                }
            } finally {
                httpclient.close();
            }
            
            String cmd = "ping 192.168.1.1 -t";
            //返回与当前 Java 应用程序相关的运行时对象
            Runtime run = Runtime.getRuntime();  
            try {  
                // 启动另一个进程来执行命令  
                Process p = run.exec(cmd);
                
                BufferedInputStream in = new BufferedInputStream(p.getInputStream());  
                BufferedReader inBr = new BufferedReader(new InputStreamReader(in));  
                String lineStr;  
                
                while ((lineStr = inBr.readLine()) != null)  
                    //获得命令执行后在控制台的输出信息  
                    System.out.println(lineStr);// 打印输出信息  
                
                //检查命令是否执行失败。  
                if (p.waitFor() != 0) {  
                    if (p.exitValue() == 1)//p.exitValue()==0表示正常结束,1:非正常结束  
                        System.err.println("命令执行失败!");  
                }  
                inBr.close();  
                in.close();  
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
        }
    }

    打印输出

    Executing request GET http://192.168.1.1/userRpm/SysRebootRpm.htm?Reboot=%D6%D8%C6%F4%CF%B5%CD%B3 HTTP/1.1
    ----------------------------------------
    HTTP/1.1 200 OK


    Pinging 192.168.1.1 with 32 bytes of data:

    Reply from 192.168.1.1: bytes=32 time=82ms TTL=64

    Request timed out.

    Request timed out.

    Request timed out.

    Reply from 192.168.1.1: bytes=32 time=1ms TTL=64

    Reply from 192.168.1.1: bytes=32 time=1ms TTL=64

    Reply from 192.168.1.1: bytes=32 time=2ms TTL=64

    Reply from 192.168.1.1: bytes=32 time=6ms TTL=64

  • 相关阅读:
    艾伟:一个让人遗忘的角落—Exception(二) 狼人:
    艾伟:ASP.NET 2.0的编译模型 狼人:
    艾伟:VS 2008快捷键 狼人:
    艾伟:[一步一步MVC]第一回:使用ActionSelector控制Action的选择 狼人:
    艾伟:C# Design Patterns (3) Decorator 狼人:
    艾伟:详解AJAX核心 —— XMLHttpRequest 对象 (下) 狼人:
    艾伟:HTML重构:战略篇 狼人:
    艾伟:WCF安全之EndPointIdentity 狼人:
    翻转句子中单词的顺序
    menucool
  • 原文地址:https://www.cnblogs.com/lightsong/p/3750929.html
Copyright © 2011-2022 走看看