zoukankan      html  css  js  c++  java
  • 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("【 响应对象  】 
    "+response);
        //响应的状态行
        System.out.println("【 响应的状态行 】 
    "+response.getStatusLine());
        //获得响应状态行的状态码
        System.out.println("【 响应的状态行的状态码 】 
    "+response.getStatusLine().getStatusCode());
    
        //响应实体
        System.out.println("【 响应实体 】 
    "+response.getEntity());
            
        //遍历响应所有的消息头
        System.out.println("=====================【 遍历打印所有的消息头】======================");
        Header[] headers=response.getAllHeaders();
        for(Header header:headers){
            System.out.println(header.getName()+"======="+header.getValue());
        }
        
        //获取特定的响应头
        System.out.println("=====================【 获取特定响应头(Server) 】======================
    "+response.getHeaders("Server")[0].getName()+"-----------------"+response.getHeaders("Server")[0].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(50)  //设置从连接池获取连接的超时时间
                                    .setConnectTimeout(50)        //设置连接远端服务器的超时时间
                                    .setSocketTimeout(50)        //设置从远端服务器上传输数据回来的超时时间
                                    .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(500)
                                    .setConnectTimeout(500)
                                    .setSocketTimeout(500);
        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捕获的内容 ]

     

  • 相关阅读:
    模板 无源汇上下界可行流 loj115
    ICPC2018JiaozuoE Resistors in Parallel 高精度 数论
    hdu 2255 奔小康赚大钱 最佳匹配 KM算法
    ICPC2018Beijing 现场赛D Frog and Portal 构造
    codeforce 1175E Minimal Segment Cover ST表 倍增思想
    ICPC2018Jiaozuo 现场赛H Can You Solve the Harder Problem? 后缀数组 树上差分 ST表 口胡题解
    luogu P1966 火柴排队 树状数组 逆序对 离散化
    luogu P1970 花匠 贪心
    luogu P1967 货车运输 最大生成树 倍增LCA
    luogu P1315 观光公交 贪心
  • 原文地址:https://www.cnblogs.com/HigginCui/p/6114942.html
Copyright © 2011-2022 走看看