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诊断检测设备启动过程。

代码

  1. package org.apache.http.examples.client;
  2.  
  3. import java.io.BufferedInputStream;
  4. import java.io.BufferedReader;
  5. import java.io.InputStreamReader;
  6.  
  7. import org.apache.http.auth.AuthScope;
  8. import org.apache.http.auth.UsernamePasswordCredentials;
  9. import org.apache.http.client.CredentialsProvider;
  10. import org.apache.http.client.methods.CloseableHttpResponse;
  11. import org.apache.http.client.methods.HttpGet;
  12. import org.apache.http.impl.client.BasicCredentialsProvider;
  13. import org.apache.http.impl.client.CloseableHttpClient;
  14. import org.apache.http.impl.client.HttpClients;
  15. import org.apache.http.util.EntityUtils;
  16.  
  17. /**
  18. * A simple example that uses HttpClient to execute an HTTP request against
  19. * a target site that requires user authentication.
  20. */
  21. public class ClientAuthentication {
  22.  
  23. public static void main(String[] args) throws Exception {
  24. CredentialsProvider credsProvider = new BasicCredentialsProvider();
  25. credsProvider.setCredentials(
  26. new AuthScope("192.168.1.1", 80),
  27. new UsernamePasswordCredentials("username", "password"));
  28. CloseableHttpClient httpclient = HttpClients.custom()
  29. .setDefaultCredentialsProvider(credsProvider)
  30. .build();
  31. try {
  32. //HttpGet httpget = new HttpGet("http://192.168.1.1/");
  33. HttpGet httpget = new HttpGet("http://192.168.1.1/userRpm/SysRebootRpm.htm?Reboot=%D6%D8%C6%F4%CF%B5%CD%B3");
  34.  
  35. System.out.println("Executing request " + httpget.getRequestLine());
  36. CloseableHttpResponse response = httpclient.execute(httpget);
  37. try {
  38. System.out.println("----------------------------------------");
  39. System.out.println(response.getStatusLine());
  40. EntityUtils.consume(response.getEntity());
  41. } finally {
  42. response.close();
  43. }
  44. } finally {
  45. httpclient.close();
  46. }
  47.  
  48. String cmd = "ping 192.168.1.1 -t";
  49. //返回与当前 Java 应用程序相关的运行时对象
  50. Runtime run = Runtime.getRuntime();
  51. try {
  52. // 启动另一个进程来执行命令
  53. Process p = run.exec(cmd);
  54.  
  55. BufferedInputStream in = new BufferedInputStream(p.getInputStream());
  56. BufferedReader inBr = new BufferedReader(new InputStreamReader(in));
  57. String lineStr;
  58.  
  59. while ((lineStr = inBr.readLine()) != null)
  60. //获得命令执行后在控制台的输出信息
  61. System.out.println(lineStr);// 打印输出信息
  62.  
  63. //检查命令是否执行失败。
  64. if (p.waitFor() != 0) {
  65. if (p.exitValue() == 1)//p.exitValue()==0表示正常结束,1:非正常结束
  66. System.err.println("命令执行失败!");
  67. }
  68. inBr.close();
  69. in.close();
  70. } catch (Exception e) {
  71. e.printStackTrace();
  72. }
  73. }
  74. }

打印输出

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

HttpClient(JAVA)使用笔记的更多相关文章

  1. Java开发笔记(一百一十二)Java11新增的HttpClient

    前面介绍了基于HttpURLConnection的网络访问请求,包括GET方式调用接口.POST方式调用接口.下载网络文件.上传本地文件这四种HTTP操作.虽然通过HttpURLConnection能 ...

  2. Java开发笔记(一百一十三)HttpClient实现下载与上传

    前面介绍了通过HttpClient实现HTTP接口的GET方式调用和POST方式调用,那么文件下载与文件上传又该如何操作呢?其实在HttpClient看来,文件下载属于特殊的GET调用,只不过应答报文 ...

  3. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  4. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  5. Java学习笔记(04)

    Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...

  6. 0032 Java学习笔记-类加载机制-初步

    JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...

  7. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

  8. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  9. 0025 Java学习笔记-面向对象-final修饰符、不可变类

    final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...

  10. [Java入门笔记] 面向对象编程基础(二):方法详解

    什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...

随机推荐

  1. [Leetcode] Subsets II

    Given a collection of integers that might contain duplicates, S, return all possible subsets. Note: ...

  2. POJ - Ubiquitous Religions

    Description 当今世界有很多不同的宗教,很难通晓他们.你有兴趣找出在你的大学里有多少种不同的宗教信仰. 你知道在你的大学里有n个学生(0 < n <= 50000) .你无法询问 ...

  3. [知识点]Tarjan算法

    // 此博文为迁移而来,写于2015年4月14日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102vxnx.html UPD ...

  4. 【wikioi】1003 电话连线

    题目链接 算法: 最小生成树 PS:被卡过2天(中间的时间没去做).日期:2013-09-13 13:49:47 ~ 2013-09-17 13:01:07 此题为基础题 刚开始学图论时只会用Krus ...

  5. 定义 iOS 方法名等不错的规范

    1.配置视图不应命名为 setxxxx, 而应叫做 showxxxx 2.让按钮高亮不应叫做 showxxx, 而应叫做 highlightedxxx. 3,弹出 toastView 可以用 show ...

  6. poj 1995 裸快速幂

    1. poj 1995  Raising Modulo Numbers 2.链接:http://poj.org/problem?id=1995 3.总结:今天七夕,来发水题纪念一下...入ACM这个坑 ...

  7. query 的list()和iterator()区别

    区别: 1.返回的类型不一样,list返回List,iterate返回iterator. 2.查询策略不同.(获取数据的方式不一样,list会直接查询数据库,iterate会先到数据库中获取id,然后 ...

  8. orcale 动态执行语句

    create or replace function fn_test2(tablename in varchar2) return number is rtn number; begin --通用的获 ...

  9. GUID相关知识。。。。转载

              全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符.GUID主要用于在拥有多个节点.多台计算机的网络 ...

  10. [转]linux 查看系统信息命令

    linux 查看系统信息命令是linux初学者必备的基础知识, 这些命令也非常有用, 因为进入linux第一件事就可能是首先查看系统信息, 因此必要的系统的学习一下这些linux系统信息命令还是非常有 ...