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 OKPinging 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)使用笔记的更多相关文章
- Java开发笔记(一百一十二)Java11新增的HttpClient
前面介绍了基于HttpURLConnection的网络访问请求,包括GET方式调用接口.POST方式调用接口.下载网络文件.上传本地文件这四种HTTP操作.虽然通过HttpURLConnection能 ...
- Java开发笔记(一百一十三)HttpClient实现下载与上传
前面介绍了通过HttpClient实现HTTP接口的GET方式调用和POST方式调用,那么文件下载与文件上传又该如何操作呢?其实在HttpClient看来,文件下载属于特殊的GET调用,只不过应答报文 ...
- 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁
什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...
- 0035 Java学习笔记-注解
什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...
- Java学习笔记(04)
Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...
- 0032 Java学习笔记-类加载机制-初步
JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...
- 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用
垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...
- 0028 Java学习笔记-面向对象-Lambda表达式
匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...
- 0025 Java学习笔记-面向对象-final修饰符、不可变类
final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...
- [Java入门笔记] 面向对象编程基础(二):方法详解
什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...
随机推荐
- [Leetcode] Subsets II
Given a collection of integers that might contain duplicates, S, return all possible subsets. Note: ...
- POJ - Ubiquitous Religions
Description 当今世界有很多不同的宗教,很难通晓他们.你有兴趣找出在你的大学里有多少种不同的宗教信仰. 你知道在你的大学里有n个学生(0 < n <= 50000) .你无法询问 ...
- [知识点]Tarjan算法
// 此博文为迁移而来,写于2015年4月14日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102vxnx.html UPD ...
- 【wikioi】1003 电话连线
题目链接 算法: 最小生成树 PS:被卡过2天(中间的时间没去做).日期:2013-09-13 13:49:47 ~ 2013-09-17 13:01:07 此题为基础题 刚开始学图论时只会用Krus ...
- 定义 iOS 方法名等不错的规范
1.配置视图不应命名为 setxxxx, 而应叫做 showxxxx 2.让按钮高亮不应叫做 showxxx, 而应叫做 highlightedxxx. 3,弹出 toastView 可以用 show ...
- poj 1995 裸快速幂
1. poj 1995 Raising Modulo Numbers 2.链接:http://poj.org/problem?id=1995 3.总结:今天七夕,来发水题纪念一下...入ACM这个坑 ...
- query 的list()和iterator()区别
区别: 1.返回的类型不一样,list返回List,iterate返回iterator. 2.查询策略不同.(获取数据的方式不一样,list会直接查询数据库,iterate会先到数据库中获取id,然后 ...
- orcale 动态执行语句
create or replace function fn_test2(tablename in varchar2) return number is rtn number; begin --通用的获 ...
- GUID相关知识。。。。转载
全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符.GUID主要用于在拥有多个节点.多台计算机的网络 ...
- [转]linux 查看系统信息命令
linux 查看系统信息命令是linux初学者必备的基础知识, 这些命令也非常有用, 因为进入linux第一件事就可能是首先查看系统信息, 因此必要的系统的学习一下这些linux系统信息命令还是非常有 ...