02_HttpClient_Get请求
【实例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请求的更多相关文章
- Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求
上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...
- Android请求网络共通类——Hi_博客 Android App 开发笔记
今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...
- 重温Http协议--请求报文和响应报文
http协议是位于应用层的协议,我们在日常浏览网页比如在导航网站请求百度首页的时候,会先通过http协议把请求做一个类似于编码的工作,发送给百度的服务器,然后在百度服务器响应请求时把相应的内容再通过h ...
- Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)
背景: 1:有用户反馈了关于跨域请求的问题. 2:有用户反馈了参数获取的问题. 3:JsonHelper的增强. 在综合上面的条件下,有了2.2版本的更新,也因此写了此文. 开源地址: https:/ ...
- nodejs之get/post请求的几种方式
最近一段时间在学习前端向服务器发送数据和请求数据,下面总结了一下向服务器发送请求用get和post的几种不同请求方式: 1.用form表单的方法:(1)get方法 前端代码: <form act ...
- ajax异步请求
做前端开发的朋友对于ajax异步更新一定印象深刻,作为刚入坑的小白,今天就和大家一起聊聊关于ajax异步请求的那点事.既然是ajax就少不了jQuery的知识,推荐大家访问www.w3school.c ...
- C# MVC 5 - 生命周期(应用程序生命周期&请求生命周期)
本文是根据网上的文章总结的. 1.介绍 本文讨论ASP.Net MVC框架MVC的请求生命周期. MVC有两个生命周期,一为应用程序生命周期,二为请求生命周期. 2.应用程序生命周期 应用程序生命周期 ...
- nodejs进阶(5)—接收请求参数
1. get请求参数接收 我们简单举一个需要接收参数的例子 如果有个查找功能,查找关键词需要从url里接收,http://localhost:8000/search?keyword=地球.通过前面的进 ...
- 无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动,并且客户端端口与服务器端口相同。如果服务器位于远程计算机上,请检查。。。
异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 无法向会话状态服务器发出会话状态请求.请确保 ASP.NET State Ser ...
随机推荐
- 单独批次性任务采用MySQL定时器解决需求
有时候我们在开发的时候会遇到一些需求是在某个固定的时间段实现某些特殊功能,只做一次或者有规律的每分钟一次每小时一次,那么这个时候我们可以启用MySQL的定时器来帮忙解决该问题. 比如,有一个场景是要求 ...
- React-native 中的触摸响应功能
我们在做APP的时候,与桌面应用系统不同的是触摸响应. web页面对触摸响应的支持和原生的APP有着很大的差异. 基本用法 componentWillMount: function() { this. ...
- 搭架私有Git服务器Gogs
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:搭架私有Git服务器Gogs.
- Cocos2d-x 3.0心得(01)-图片载入与混合模式
近期開始用cocos2dx 3.0做东西,略有心(cao)得(dian),略微作下记录吧. v3.0相对v2.2来说,最引人注意的,应该是对触摸层级的优化.和lambda回调函数的引入(嗯嗯.不枉我改 ...
- jquery回车提交表单
jquery回车提交表单,比较方便的功能. 三个事件keydown,keypress,keyup,分别是按下,按着没上抬,上抬键盘 ,所以用keyup. $(document).keyup(funct ...
- C++11 std::bind std::function 高级使用方法
从最基础的了解,std::bind和std::function /* * File: main.cpp * Author: Vicky.H * Email: eclipser@163.com */ # ...
- [Effective C++ --009]确定对象被使用前已先被初始化
在确保对象在使用前已先被初始化这一条款的编码实践中,作者为我们总结了三条经验,它们分别是: ------------------------------------------------------ ...
- Zend Studio 10正式版注册破解
1.文件和汉化文件 ZendStudio官方下载地址:http://www.geekso.com/component/zendstudio-downloads/ 百度云地址: 10.0.0.msi文件 ...
- 实例源码--Android日历实例源码
下载源码 技术要点: 1.Android基础控件的使用 2.Android应用开发基础框架 3.源码带有非常详细的中文 注释 ...... 详细介绍: 1. Android应用开 发技术 此套 ...
- Redirect
Redirect To use this Class, add the following to the top of the file. use Redirect; Redirect::to($pa ...