zoukankan      html  css  js  c++  java
  • HttpClient

    1:概述

    HttpClient是HttpComponents(简称为hc)项目其中的一部份,访问地址:http://hc.apache.org/



    HttpClient是一个代码级的Http客户端工具,可以使用它模拟浏览器向Http服务器发送请求。使用HttpClient还需要HttpCore.后者包括Http请求与Http响应的代码封装。

        public final static void main(String[] args) throws Exception {
            HttpClient httpclient = new DefaultHttpClient();
            try {
                HttpGet httpget = new HttpGet("http://www.apache.org/");
                System.out.println("executing request " + httpget.getURI());
                HttpResponse response = httpclient.execute(httpget);
                HttpEntity entity = response.getEntity();
    
                System.out.println("----------------------------------------");
                System.out.println(response.getStatusLine());
                if (entity != null) {
                    System.out.println("Response content length: " + entity.getContentLength());
                }
                System.out.println("----------------------------------------");
    
                InputStream inSm = entity.getContent();
                Scanner inScn = new Scanner(inSm);
                while (inScn.hasNextLine()) {
                    System.out.println(inScn.nextLine());
                }
                // Do not feel like reading the response body
                // Call abort on the request object
                httpget.abort();
            } finally {
                // When HttpClient instance is no longer needed,
                // shut down the connection manager to ensure
                // immediate deallocation of all system resources
                httpclient.getConnectionManager().shutdown();
            }
        }
    

      
    httpcore:EntityUtils.toString(httpEntity)
    读取response响应内容部分,也可以借助于 httpcore-4.1.2.jar 里面的

    Java代码 复制代码 收藏代码
    1. String content = EntityUtils.toString(httpEntity); 
    String content = EntityUtils.toString(httpEntity);
    /**
     * User: liuwentao
     * Time: 12-1-25 下午1:23
     */
    public class Demo1 {
    
        /**
         * 用 get 方法访问 www.apache.org 并返回内容
         *
         * @param args
         */
        public static void main(String[] args) {
            //创建默认的 HttpClient 实例
            HttpClient httpClient = new DefaultHttpClient();
            try {
                //创建 httpUriRequest 实例
                HttpGet httpGet = new HttpGet("http://www.apache.org/");
                System.out.println("uri=" + httpGet.getURI());
    
                //执行 get 请求
                HttpResponse httpResponse = httpClient.execute(httpGet);
    
                //获取响应实体
                HttpEntity httpEntity = httpResponse.getEntity();
                //打印响应状态
                System.out.println(httpResponse.getStatusLine());
                if (httpEntity != null) {
                    //响应内容的长度
                    long length = httpEntity.getContentLength();
                    //响应内容
                    String content = EntityUtils.toString(httpEntity);
    
                    System.out.println("Response content length:" + length);
                    System.out.println("Response content:" + content);
                }
    
                //有些教程里没有下面这行
                httpGet.abort();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                //关闭连接,释放资源
                httpClient.getConnectionManager().shutdown();
            }
        }
    }
    

      执行结果:



    httpget.setHeader

    1:分析请求包中这六个头信息



    2:代码

        /**
         * @param args
         * @throws IOException
         */
        public static void main(String[] args) {
            HttpClient httpClient = new DefaultHttpClient();
            try {
                HttpGet httpget = new HttpGet("http://www.iteye.com");
    
                httpget.setHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
                httpget.setHeader("Accept-Language", "zh-cn,zh;q=0.5");
                httpget.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 5.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1)");
                httpget.setHeader("Accept-Encoding", "gzip, deflate");
                httpget.setHeader("Accept-Charset", "GB2312,utf-8;q=0.7,*;q=0.7");
                httpget.setHeader("Host", "www.iteye.com");
                httpget.setHeader("Connection", "Keep-Alive");
    
                HttpResponse response = httpClient.execute(httpget);
                HttpEntity entity = response.getEntity();
    
                System.out.println("----------------------------------------");
                System.out.println(response.getStatusLine());
                if (entity != null) {
                    System.out.println("Response content length: " + entity.getContentLength());
                }
                System.out.println("----------------------------------------");
    
                InputStream inSm = entity.getContent();
                Scanner inScn = new Scanner(inSm);
                while (inScn.hasNextLine()) {
                    System.out.println(inScn.nextLine());
                }
                // Do not feel like reading the response body
                // Call abort on the request object
                httpget.abort();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                // When HttpClient instance is no longer needed,
                // shut down the connection manager to ensure
                // immediate deallocation of all system resources
                httpClient.getConnectionManager().shutdown();
            }
        }
    

      3:效果

    以上乱码是由于

    Java代码 复制代码 收藏代码
      1. httpget.setHeader("Accept-Encoding", "gzip, deflate");   
    注释掉这行
    /**
     * User: liuwentao
     * Time: 12-1-25 下午1:23
     */
    public class Demo3 {
    
        /**
         * 用 get 方法访问 www.baidu.com 并返回内容
         *
         * @param args
         */
        public static void main(String[] args) {
            //创建默认的 HttpClient 实例
            HttpClient httpClient = new DefaultHttpClient();
    
            try {
                //创建 httpUriRequest 实例
                HttpGet httpGet = new HttpGet("http://www.iteye.com");
    
                httpGet.setHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
                httpGet.setHeader("Accept-Language", "zh-cn,zh;q=0.5");
                httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 5.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1)");
    //            httpGet.setHeader("Accept-Encoding", "gzip, deflate");
                httpGet.setHeader("Accept-Charset", "GB2312,utf-8;q=0.7,*;q=0.7");
                httpGet.setHeader("Host", "www.iteye.com");
                httpGet.setHeader("Connection", "Keep-Alive");
                System.out.println("uri=" + httpGet.getURI());
    
                //执行 get 请求
                HttpResponse httpResponse = httpClient.execute(httpGet);
    
                //获取响应实体
                HttpEntity httpEntity = httpResponse.getEntity();
                //打印响应状态
                System.out.println(httpResponse.getStatusLine());
                if (httpEntity != null) {
                    //响应内容的长度
                    long length = httpEntity.getContentLength();
                    //响应内容
                    String content = EntityUtils.toString(httpEntity);
    
                    System.out.println("Response content length:" + length);
                    System.out.println("Response content:" + content);
                }
    
                //有些教程里没有下面这行
                httpGet.abort();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                //关闭连接,释放资源
                httpClient.getConnectionManager().shutdown();
            }
        }
    }
    

      效果:


    用post方法访问本地应用根据传递参数不同,返回不同结果

        <servlet>
            <servlet-name>Test1Servlet</servlet-name>
            <servlet-class>demo.servlet.Test1Servlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>Test1Servlet</servlet-name>
            <url-pattern>/test1Servlet</url-pattern>
        </servlet-mapping>
    

      

    /**
     * User: liuwentao
     * Time: 11-12-25 下午1:08
     */
    public class Test1Servlet extends HttpServlet {
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            //接收地址栏参数
            String param1 = request.getParameter("param1");
            //输出
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            out.write("你传递来的参数param1=" + param1);
            out.close();
        }
    }
    

      

    /**
     * User: liuwentao
     * Time: 12-1-25 下午1:23
     */
    public class Demo2 {
    
        /**
         * 用post方法访问本地应用根据传递参数不同,返回不同结果
         *
         * @param args
         */
        public static void main(String[] args) {
            //创建默认的 HttpClient 实例
            HttpClient httpClient = new DefaultHttpClient();
    
            HttpPost httpPost = new HttpPost("http://localhost:86/test1Servlet");
    
            List<NameValuePair> formParams = new ArrayList<NameValuePair>();
            formParams.add(new BasicNameValuePair("param1", "刘文涛"));
            UrlEncodedFormEntity urlEncodedFormEntity;
    
            try {
                urlEncodedFormEntity = new UrlEncodedFormEntity(formParams, "UTF-8");
                httpPost.setEntity(urlEncodedFormEntity);
                System.out.println("execurting request:" + httpPost.getURI());
                HttpResponse httpResponse = null;
                httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();
                if (httpEntity != null) {
                    String content = EntityUtils.toString(httpEntity, "UTF-8");
                    System.out.println("Response content:" + content);
                }
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                //关闭连接,释放资源
                httpClient.getConnectionManager().shutdown();
            }
        }
    }
    

      结果:

    生活不止眼前的苟且,还有诗和远方。。。
  • 相关阅读:
    prototype.js超强的javascript类库
    MySQL Server Architecture
    Know more about RBA redo block address
    MySQL无处不在
    利用Oracle Enterprise Manager Cloud Control 12c创建DataGuard Standby
    LAMP Stack
    9i中DG remote archive可能导致Primary Database挂起
    Oracle数据库升级与补丁
    Oracle为何会发生归档日志archivelog大小远小于联机重做日志online redo log size的情况?
    Oracle Ksplice如何工作?How does Ksplice work?
  • 原文地址:https://www.cnblogs.com/shaohz2014/p/3529446.html
Copyright © 2011-2022 走看看