【实例1. GET请求百度(乱码)】

/**
* Http GET请求百度,但是返回乱码
*/
public static void main(String[] args) throws Exception {
//创建一个默认的HttpClient类
CloseableHttpClient httpclient=HttpClients.createDefault();
//设置Http连接方式为get,访问的URL为"http://www.baidu.com"
HttpGet httpGet=new HttpGet("http://www.baidu.com");
//得到返回的response对象
HttpResponse response=httpclient.execute(httpGet);
//得到response里面的实体信息
HttpEntity entity=response.getEntity();
//利用EntityUtils工具类将实体信息转换为字符串
String html=EntityUtils.toString(entity);
//打印
System.out.println(html);
//关闭链接
httpclient.close();
}

【实例2.Get请求百度,解决乱码问题】

public static void main(String[] args) throws Exception {
//创建一个默认的HttpClient类
CloseableHttpClient httpclient=HttpClients.createDefault();
//设置Http连接方式为get,访问的URL为"http://www.baidu.com"
HttpGet httpGet=new HttpGet("http://www.baidu.com");
//得到返回的response对象
HttpResponse response=httpclient.execute(httpGet);
//得到response里面的实体信息
HttpEntity entity=response.getEntity();
//利用EntityUtils工具类将实体信息转换为字符串
String html=EntityUtils.toString(entity,"UTF-8");
//打印
System.out.println(html);
//关闭链接
httpclient.close();
}

【实例3.带各种消息头的GET请求】

@Test
public void testRequestHeader() throws ClientProtocolException, IOException{
CloseableHttpClient httpclient=HttpClients.createDefault();
HttpGet httpGet=new HttpGet("http://download.csdn.net/my/uploads"); //访问CSDN的"下载资源"页面
//带上cookie请求消息头
httpGet.setHeader("cookie", "uuid_tt_dd=439312343077018427_20160728; bdshare_firstime=2345017309443; _JQCMT_ifcookie=1; ********************"); //登录之后用浏览器获取对应给的Cookie
httpGet.setHeader("Host","download.csdn.net");
httpGet.setHeader("Referer","http://download.csdn.net/my/uploads");
HttpResponse response=httpclient.execute(httpGet);
HttpEntity entity=response.getEntity();
String html=EntityUtils.toString(entity,"UTF-8");
System.out.println(html);
httpclient.close();
}

【实例4. 获取Get请求百度后 响应页面的各个信息(状态行、消息头、响应正文)】

@Test
public void test01() throws Exception{
CloseableHttpClient httpclient=HttpClients.createDefault();
HttpGet httpGet=new HttpGet("http://www.baidu.com");
HttpResponse response=httpclient.execute(httpGet); //响应的response对象
System.out.println("【 响应对象 】 \n"+response);
//响应的状态行
System.out.println("【 响应的状态行 】 \n"+response.getStatusLine());
//获得响应状态行的状态码
System.out.println("【 响应的状态行的状态码 】 \n"+response.getStatusLine().getStatusCode()); //响应实体
System.out.println("【 响应实体 】 \n"+response.getEntity()); //遍历响应所有的消息头
System.out.println("=====================【 遍历打印所有的消息头】======================");
Header[] headers=response.getAllHeaders();
for(Header header:headers){
System.out.println(header.getName()+"======="+header.getValue());
} //获取特定的响应头
System.out.println("=====================【 获取特定响应头(Server) 】======================\n"+response.getHeaders("Server")[].getName()+"-----------------"+response.getHeaders("Server")[].getValue()); //将响应的页面转化成字符串
System.out.println("=====================【 将响应的页面转化成字符串 】=========================");
HttpEntity entity=response.getEntity();
String html=EntityUtils.toString(entity,"UTF-8");
System.out.println(html); //关闭连接
httpclient.close();
}

[ 运行结果 ]

【实例5.利用URIBuilder创建带参数的URI的方式一(常用)】

/**
* 利用URIBuilder创建带参数的URI
* 例子:搜狗查询 关键字搜索"HigginCui"
*/
@Test
public void testURI() throws Exception{
CloseableHttpClient httpclient=HttpClients.createDefault(); URIBuilder uriBuilder=new URIBuilder("http://www.sogou.com/web");
uriBuilder.setParameter("query", "HigginCui"); //其实这里也可以用uriBuilder.addParameter("query","HigginCui")来代替,两者有一点区别,具体看源码
uriBuilder.setParameter("ie", "utf-8");
URI uri=uriBuilder.build();
System.out.println("uri=="+uri); //uri==http://www.sogou.com/web?query=HigginCui&ie=utf-8 HttpGet httpGet=new HttpGet(uri);
HttpResponse response=httpclient.execute(httpGet); //将响应的页面转化成字符串
System.out.println("=====================【 将响应的页面转化成字符串 】=========================");
HttpEntity entity=response.getEntity();
String html=EntityUtils.toString(entity,"UTF-8");
System.out.println(html);
httpclient.close();
}

[ 浏览器用这个URI去进行搜索的实际效果 ]

【实例6.利用URIBuilder创建带参数的URI的方式二】

/**
* 利用URIBuilder创建带参数的URI的第二种方式
* 例子:搜狗查询 关键字搜索"HigginCui"
*/
@Test
public void testURI2() throws Exception{
CloseableHttpClient httpclient=HttpClients.createDefault(); URIBuilder uriBuilder=new URIBuilder("http://www.sogou.com/web"); List<NameValuePair> valuePairs=new ArrayList<NameValuePair>();
valuePairs.add(new BasicNameValuePair("query", "HigginCui"));
valuePairs.add(new BasicNameValuePair("ie", "utf-8"
));
uriBuilder.addParameters(valuePairs);
URI uri=uriBuilder.build();
System.out.println("uri=="+uri); //uri==http://www.sogou.com/web?query=HigginCui&ie=utf-8 HttpGet httpGet=new HttpGet(uri);
HttpResponse response=httpclient.execute(httpGet); //将响应的页面转化成字符串
System.out.println("=====================【 将响应的页面转化成字符串 】=========================");
HttpEntity entity=response.getEntity();
String html=EntityUtils.toString(entity,"UTF-8");
System.out.println(html);
httpclient.close();
}

【实例7.关于RequestConfig类(HTTPRequest的配置信息)】

Test
public void testRequestConfig() throws ClientProtocolException, IOException{
CloseableHttpClient httpclient=HttpClients.createDefault(); HttpGet httpGet=new HttpGet("http://www.baidu.com"); /**设置请求和传输的超时时间**/
RequestConfig requestConfig=RequestConfig.custom()
.setConnectionRequestTimeout() //设置从连接池获取连接的超时时间
.setConnectTimeout()       //设置连接远端服务器的超时时间
.setSocketTimeout()        //设置从远端服务器上传输数据回来的超时时间
.build();
httpGet.setConfig(requestConfig); //将配置requestConfig设置到HttpGet请求中
CloseableHttpResponse response=httpclient.execute(httpGet); response.close();
httpclient.close();
}

【实例8.设置代理,利用Fiddler捕获本地的请求】

@Test
public void testRequestConfigGet() throws ClientProtocolException, IOException{
CloseableHttpClient httpclient=HttpClients.createDefault(); HttpGet httpGet=new HttpGet("http://www.baidu.com"); /**设置请求和传输的超时时间**/
RequestConfig.Builder builder=RequestConfig.custom()
.setConnectionRequestTimeout()
.setConnectTimeout()
.setSocketTimeout();
String proxy="127.0.0.1:8888"; //本地Fiddler代理监听的端口
builder.setProxy(HttpHost.create(proxy)); //设置代理

RequestConfig requestConfig=builder.build(); httpGet.setConfig(requestConfig); //将配置requestConfig设置到HttpGet请求中 //带上cookie请求消息头
httpGet.setHeader("Cookie", "***************HigginCui***************");
httpGet.setHeader("Accept","*/*"); CloseableHttpResponse response=httpclient.execute(httpGet); response.close();
httpclient.close();
}

[ 运行之后的fiddler捕获的内容 ]

02_HttpClient_Get请求的更多相关文章

  1. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

  2. Android请求网络共通类——Hi_博客 Android App 开发笔记

    今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...

  3. 重温Http协议--请求报文和响应报文

    http协议是位于应用层的协议,我们在日常浏览网页比如在导航网站请求百度首页的时候,会先通过http协议把请求做一个类似于编码的工作,发送给百度的服务器,然后在百度服务器响应请求时把相应的内容再通过h ...

  4. Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)

    背景: 1:有用户反馈了关于跨域请求的问题. 2:有用户反馈了参数获取的问题. 3:JsonHelper的增强. 在综合上面的条件下,有了2.2版本的更新,也因此写了此文. 开源地址: https:/ ...

  5. nodejs之get/post请求的几种方式

    最近一段时间在学习前端向服务器发送数据和请求数据,下面总结了一下向服务器发送请求用get和post的几种不同请求方式: 1.用form表单的方法:(1)get方法 前端代码: <form act ...

  6. ajax异步请求

    做前端开发的朋友对于ajax异步更新一定印象深刻,作为刚入坑的小白,今天就和大家一起聊聊关于ajax异步请求的那点事.既然是ajax就少不了jQuery的知识,推荐大家访问www.w3school.c ...

  7. C# MVC 5 - 生命周期(应用程序生命周期&请求生命周期)

    本文是根据网上的文章总结的. 1.介绍 本文讨论ASP.Net MVC框架MVC的请求生命周期. MVC有两个生命周期,一为应用程序生命周期,二为请求生命周期. 2.应用程序生命周期 应用程序生命周期 ...

  8. nodejs进阶(5)—接收请求参数

    1. get请求参数接收 我们简单举一个需要接收参数的例子 如果有个查找功能,查找关键词需要从url里接收,http://localhost:8000/search?keyword=地球.通过前面的进 ...

  9. 无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动,并且客户端端口与服务器端口相同。如果服务器位于远程计算机上,请检查。。。

    异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 无法向会话状态服务器发出会话状态请求.请确保 ASP.NET State Ser ...

随机推荐

  1. angular中的promise

    angular中的promise用法 标签(空格分隔): angular 前言 Promise其实是一个规范,用类似then().then()这样的链式调用形式来处理因为异步带来意大利面条式的代码(多 ...

  2. SQL 触发器(学生,课程表,选修表)

    SQL 触发器(学生,课程表,选修表) 触发器是一种特殊类型的存储过程,它不由用户通过命令来执行,而是在用户对表执行了插入,删除或修改表中数据等操作时激活执行.可以这样形容:存储过程像一个遥控炸弹,我 ...

  3. Volley使用指南第一回(来自developer.android)

    最近闲来想看看android网络方面的东西.google在2013年发布了一个叫做Volley的网络请求框架,我看了一下官网,居然在training里面就有教程.首先,英文的东西看着 还是挺不爽的,特 ...

  4. 最牛X的编码套路

    最近,我大量阅读了Steve Yegge的文章.其中有一篇叫"Practicing Programming"(练习编程),写成于2005年,读后令我惊讶不已: 与你所相信的恰恰相反 ...

  5. hbase多用户入库,regionserver下线问题

    近期对hbase多用户插入数据时,regionserver会莫名奇妙的关闭,regionserver的日志有很多异常: 如下: org.apache.hadoop.hbase.DroppedSnaps ...

  6. cocos2d-x 手势之简单实现

    转自:http://blog.sina.com.cn/s/blog_61ece099010187tl.html 手势之前也发过一篇,但是我感觉那个还不够轻巧. 而且大多数游戏里面不会有那么复杂的手势, ...

  7. $_SERVER详细资料整理(转)

    PHP编程中经常需要用到一些服务器的一些资料,特把$_SERVER的详细参数整理下,方便以后使用. $_SERVER['PHP_SELF'] #当前正在执行脚本的文件名,与 document root ...

  8. appDelegate中的委托协议方法以及使用观察者模式获取其触发方法

    //当应用程序将要进入非活动状态执行,在此期间,应用程序不接受消息或事件,比如来电 - (void)applicationWillResignActive:(UIApplication *)appli ...

  9. 常见排序算法及其java实现

    最近学习了下java,感觉java在基本语法上与C++非常相似.作为练习,我用java实现了冒泡排序.选择排序.插入排序.基尔排序.快速排序.堆排序.计数排序.合并排序. 以下为实现代码: publi ...

  10. 【C/C++多线程编程之六】pthread相互排斥量

    多线程编程之线程同步相互排斥量       Pthread是 POSIX threads 的简称,是POSIX的线程标准.          Pthread线程同步指多个线程协调地,有序地同步使用共享 ...