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();
            }
        }
    }
    

      结果:

    生活不止眼前的苟且,还有诗和远方。。。
  • 相关阅读:
    bash脚本入门
    DNS 递归查询
    场景题
    利用 python 发送邮件(qq 邮件)
    Swagger 简单使用
    Nginx支持HTTPS,生成SSL证书
    使用 Python 搭建简易HTTP服务器
    扫码登陆原理
    【积累】在jQuery.Validate额中使用可以传入参数的message
    关于RUBY处理多语言转字符编码的一点经验 nkf
  • 原文地址:https://www.cnblogs.com/shaohz2014/p/3529446.html
Copyright © 2011-2022 走看看