package com.grefr.basemethod;

/*JAVA发送HTTP请求,返回HTTP响应内容,实例及应用 博客分类: JAVA实现

Java.netBeanJDKApache .

JDK 中提供了一些对无状态协议请求(HTTP )的支持,下面我就将我所写的一个小例子(组件)进行描述:

首先让我们先构建一个请求类(HttpRequester )。

该类封装了 JAVA 实现简单请求的代码,如下: */

//Java代码

import java.io.BufferedReader; 

import java.io.IOException; 

import java.io.InputStream; 

import java.io.InputStreamReader; 

import java.net.HttpURLConnection; 

import java.net.URL; 

import java.nio.charset.Charset; 

import java.util.Map; 

import java.util.Vector; 

  

/**

* HTTP请求对象



* @author YYmmiinngg

*/

public class HttpRequester { 

    private String defaultContentEncoding; 

  

    public HttpRequester() { 

        this.defaultContentEncoding = Charset. defaultCharset().name(); 

    } 

  

    /**

     * 发送GET请求

     * 

     * @param urlString

     *            URL地址

     * @return 响应对象

     * @throws IOException

     */ 

    public HttpRespons sendGet(String urlString) throws IOException { 

        return this.send(urlString, "GET", null, null); 

    } 

  

    /**

     * 发送GET请求

     * 

     * @param urlString

     *            URL地址

     * @param params

     *            参数集合

     * @return 响应对象

     * @throws IOException

     */ 

    public HttpRespons sendGet(String urlString, Map<String, String> params) 

            throws IOException { 

        return this.send(urlString, "GET", params, null); 

    } 

  

    /**

     * 发送GET请求

     * 

     * @param urlString

     *            URL地址

     * @param params

     *            参数集合

     * @param propertys

     *            请求属性

     * @return 响应对象

     * @throws IOException

     */ 

    public HttpRespons sendGet(String urlString, Map<String, String> params, 

            Map<String, String> propertys) throws IOException { 

        return this.send(urlString, "GET", params, propertys); 

    } 

  

    /**

     * 发送POST请求

     * 

     * @param urlString

     *            URL地址

     * @return 响应对象

     * @throws IOException

     */ 

    public HttpRespons sendPost(String urlString) throws IOException { 

        return this.send(urlString, "POST", null, null); 

    } 

  

    /**

     * 发送POST请求

     * 

     * @param urlString

     *            URL地址

     * @param params

     *            参数集合

     * @return 响应对象

     * @throws IOException

     */ 

    public HttpRespons sendPost(String urlString, Map<String, String> params) 

            throws IOException { 

        return this.send(urlString, "POST", params, null); 

    } 

  

    /**

     * 发送POST请求

     * 

     * @param urlString

     *            URL地址

     * @param params

     *            参数集合

     * @param propertys

     *            请求属性

     * @return 响应对象

     * @throws IOException

     */ 

    public HttpRespons sendPost(String urlString, Map<String, String> params, 

            Map<String, String> propertys) throws IOException { 

        return this.send(urlString, "POST", params, propertys); 

    } 

  

    /**

     * 发送HTTP请求

     * 

     * @param urlString

     * @return 响映对象

     * @throws IOException

     */ 

    private HttpRespons send(String urlString, String method, 

            Map<String, String> parameters, Map<String, String> propertys) 

            throws IOException { 

        HttpURLConnection urlConnection = null; 

  

        if (method.equalsIgnoreCase("GET") && parameters != null) { 

            StringBuffer param = new StringBuffer(); 

            int i = 0; 

            for (String key : parameters.keySet()) { 

                if (i == 0) 

                    param.append( "?"); 

                else

                    param.append( "&"); 

                param.append(key).append("=" ).append(parameters.get(key)); 

                i++; 

            } 

            urlString += param; 

        } 

        URL url = new URL(urlString); 

        urlConnection = (HttpURLConnection) url.openConnection(); 

  

        urlConnection.setRequestMethod(method); 

        urlConnection.setDoOutput( true); 

        urlConnection.setDoInput( true); 

        urlConnection.setUseCaches( false); 

  

        if (propertys != null) 

            for (String key : propertys.keySet()) { 

                urlConnection.addRequestProperty(key, propertys.get(key)); 

            } 

  

        if (method.equalsIgnoreCase("POST") && parameters != null) { 

            StringBuffer param = new StringBuffer(); 

            for (String key : parameters.keySet()) { 

                param.append( "&"); 

                param.append(key).append("=" ).append(parameters.get(key)); 

            } 

            urlConnection.getOutputStream().write(param.toString().getBytes()); 

            urlConnection.getOutputStream().flush(); 

            urlConnection.getOutputStream().close(); 

        } 

  

        return this.makeContent(urlString, urlConnection); 

    } 

  

    /**

     * 得到响应对象

     * 

     * @param urlConnection

     * @return 响应对象

     * @throws IOException

     */ 

    private HttpRespons makeContent(String urlString, 

            HttpURLConnection urlConnection) throws IOException { 

        HttpRespons httpResponser = new HttpRespons(); 

        try { 

            InputStream in = urlConnection.getInputStream(); 

            BufferedReader bufferedReader = new BufferedReader( 

                    new InputStreamReader(in)); 

            httpResponser. contentCollection = new Vector<String>(); 

            StringBuffer temp = new StringBuffer(); 

            String line = bufferedReader.readLine(); 

            while (line != null) { 

                httpResponser. contentCollection.add(line); 

                temp.append(line).append( "\r\n"); 

                line = bufferedReader.readLine(); 

            } 

            bufferedReader.close(); 

  

            String ecod = urlConnection.getContentEncoding(); 

            if (ecod == null) 

                ecod = this.defaultContentEncoding; 

  

            httpResponser. urlString = urlString; 

  

            httpResponser. defaultPort = urlConnection.getURL().getDefaultPort(); 

            httpResponser. file = urlConnection.getURL().getFile(); 

            httpResponser. host = urlConnection.getURL().getHost(); 

            httpResponser. path = urlConnection.getURL().getPath(); 

            httpResponser. port = urlConnection.getURL().getPort(); 

            httpResponser. protocol = urlConnection.getURL().getProtocol(); 

            httpResponser. query = urlConnection.getURL().getQuery(); 

            httpResponser. ref = urlConnection.getURL().getRef(); 

            httpResponser. userInfo = urlConnection.getURL().getUserInfo(); 

  

            httpResponser. content = new String(temp.toString().getBytes(), ecod); 

            httpResponser. contentEncoding = ecod; 

            httpResponser. code = urlConnection.getResponseCode(); 

            httpResponser. message = urlConnection.getResponseMessage(); 

            httpResponser. contentType = urlConnection.getContentType(); 

            httpResponser. method = urlConnection.getRequestMethod(); 

            httpResponser. connectTimeout = urlConnection.getConnectTimeout(); 

            httpResponser. readTimeout = urlConnection.getReadTimeout(); 

  

            return httpResponser; 

        } catch (IOException e) { 

            throw e; 

        } finally { 

            if (urlConnection != null) 

                urlConnection.disconnect(); 

        } 

    } 

  

    /**

     * 默认的响应字符集

     */ 

    public String getDefaultContentEncoding() { 

        return this.defaultContentEncoding; 

    } 

  

    /**

     * 设置默认的响应字符集

     */ 

    public void setDefaultContentEncoding(String defaultContentEncoding) { 

        this.defaultContentEncoding = defaultContentEncoding; 

    } 

}

/*其次我们来看看响应对象(HttpRespons )。 响应对象其实只是一个数据BEAN ,由此来封装请求响应的结果数据,如下:

java代码  */

import java.util.Vector; 

  

/**

* 响应对象

*/

public class HttpRespons { 

  

    String urlString; 

  

   int defaultPort; 

 

   String file; 

 

   String host; 

 

   String path; 

 

   int port; 

 

   String protocol; 

 

   String query; 

 

   String ref; 

 

   String userInfo; 

 

   String contentEncoding; 

 

   String content; 

 

   String contentType; 

 

   int code; 

 

   String message; 

 

   String method; 

 

   int connectTimeout; 

 

   int readTimeout; 

 

   Vector<String> contentCollection; 

 

   public String getContent() { 

       return content; 

   } 

 

   public String getContentType() { 

       return contentType; 

   } 

 

   public int getCode() { 

       return code; 

   } 

 

   public String getMessage() { 

       return message; 

   } 

 

   public Vector<String> getContentCollection() { 

       return contentCollection; 

   } 

 

   public String getContentEncoding() { 

       return contentEncoding; 

   } 

 

   public String getMethod() { 

       return method; 

   } 

 

   public int getConnectTimeout() { 

       return connectTimeout; 

   } 

 

   public int getReadTimeout() { 

       return readTimeout; 

   } 

 

   public String getUrlString() { 

       return urlString; 

   } 

 

   public int getDefaultPort() { 

       return defaultPort; 

   } 

 

   public String getFile() { 

       return file; 

   } 

 

   public String getHost() { 

       return host; 

   } 

 

   public String getPath() { 

       return path; 

    } 

  

    public int getPort() { 

        return port; 

    } 

  

    public String getProtocol() { 

        return protocol; 

    } 

  

    public String getQuery() { 

        return query; 

    } 

  

    public String getRef() { 

        return ref; 

    } 

  

    public String getUserInfo() { 

        return userInfo; 

    } 

  

}

import java.util.Vector;

*//**

* 响应对象

*//*

public class HttpRespons {

String urlString;

int defaultPort;

String file;

String host;

String path;

int port;

String protocol;

String query;

String ref;

String userInfo;

String contentEncoding;

String content;

String contentType;

int code;

String message;

String method;

int connectTimeout;

int readTimeout;

Vector<String> contentCollection;

public String getContent() {

             return content;

      }

public String getContentType() {

             return contentType;

      }

public int getCode() {

             return code;

      }

public String getMessage() {

             return message;

      }

public Vector<String> getContentCollection() {

             return contentCollection;

      }

public String getContentEncoding() {

             return contentEncoding;

      }

public String getMethod() {

             return method;

      }

public int getConnectTimeout() {

             return connectTimeout;

      }

public int getReadTimeout() {

             return readTimeout;

      }

public String getUrlString() {

             return urlString;

      }

public int getDefaultPort() {

             return defaultPort;

      }

public String getFile() {

             return file;

      }

public String getHost() {

             return host;

      }

public String getPath() {

             return path;

      }

public int getPort() {

             return port;

      }

public String getProtocol() {

             return protocol;

      }

public String getQuery() {

             return query;

      }

public String getRef() {

             return ref;

      }

public String getUserInfo() {

             return userInfo;

      }

}

最后,让我们写一个应用类,测试以上代码是否正确

Java代码

import com.yao.http.HttpRequester; 

import com.yao.http.HttpRespons; 

  

public class Test { 

    public static void main(String[] args) { 

        try { 

            HttpRequester request = new HttpRequester(); 

            HttpRespons hr = request.sendGet( "http://www.csdn.net"); 

 

            System. out.println(hr.getUrlString()); 

            System. out.println(hr.getProtocol()); 

            System. out.println(hr.getHost()); 

            System. out.println(hr.getPort()); 

            System. out.println(hr.getContentEncoding()); 

            System. out.println(hr.getMethod()); 

             

            System. out.println(hr.getContent()); 

  

        } catch (Exception e) { 

            e.printStackTrace(); 

        } 

    } 

}

HTTP请求范例的更多相关文章

  1. URLConnection 和 HttpClients 发送请求范例

    . java.net.URLConnection package test; import java.io.BufferedReader; import java.io.IOException; im ...

  2. URLConnection 和 HttpClients 发送请求范例【原】

    笔记,未完全标准. java.net.URLConnection package test; import java.io.BufferedReader; import java.io.IOExcep ...

  3. 浅谈我为什么选择用Retrofit作为我的网络请求框架

    比较AsyncTask.Volley.Retrofit三者的请求时间 使用 单次请求 7个请求 25个请求 AsyncTask 941ms 4539ms 13957ms Volley 560ms 22 ...

  4. window apidoc的安装和使用

    apidoc是一个轻量级的在线REST接口文档生成系统,支持多种主流语言,包括Java.C.C#.PHP和Javascript等.使用者仅需要按照要求书写相关注释,就可以生成可读性好.界面美观的在线接 ...

  5. Hadoop学习(二) Hadoop配置文件参数详解

    Hadoop运行模式分为安全模式和非安全模式,在这里,我将讲述非安全模式下,主要配置文件的重要参数功能及作用,本文所使用的Hadoop版本为2.6.4. etc/hadoop/core-site.xm ...

  6. Hadoop Intro - Configure

    Hadoop学习(二) Hadoop配置文件参数详解   Hadoop运行模式分为安全模式和非安全模式,在这里,我将讲述非安全模式下,主要配置文件的重要参数功能及作用,本文所使用的Hadoop版本为2 ...

  7. 【LoadRunner】如何对GIS服务器进行性能测试

    1.需求了解 首先确定对gis服务器压测的测试范围,形成具体的测试用例,gis平台都是通过网页端的javascript api调用的gis集群服务接口,通过LR录制上一步中的业务操作,找到javasc ...

  8. 赵雅智:android教学大纲

    带下划线为详细内容链接地址.点击后可跳转.希望给大家尽一些微薄之力.眼下还在整理中 教学章节 教学内容 学时安排 备注 1 Android高速入门 2 Android模拟器与常见命令 3 Androi ...

  9. apidoc接口文档的快速生成

    官方文档连接:http://apidocjs.com/#demo apidoc是一个轻量级的在线REST接口文档生成系统,支持多种主流语言,包括Java.C.C#.PHP和Javascript等.使用 ...

随机推荐

  1. 【RegExp】JavaScript中正则表达式判断匹配规则以及常用方法

    字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在. 正则表达式是一种用来匹配字符串的强有力的武器.它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符 ...

  2. C#之异步

    C#之异步 异步是相对于同步而言.跟多线程不能同一而论.异步简单而言好比一个人两双手可以同时做两件以上不同的事情.多线程好比多个人做不同或相同的事情. 异步跟多线程有什么关系? 异步可以分为CPU异步 ...

  3. 第二棵树:Splay

    Splay这东西神难打--什么都没动板子敲上就直逼200行了,而且非常难记(仿佛是模板长的必然结果).但是为什么还要学呢?据说是因为它可以实现区间操作.但是自从我得知无旋Treap也能做到这些,默默对 ...

  4. Hibernate批量操作(一)

    在项目的开发过程之中,我们常会遇到数据的批量处理问题.在持久层采用Hibernate框架时,在进行批量操作时,需要考虑Hibernate实现机制带来的一些问题. 我们知道在每个Hibernate Se ...

  5. swift AVAudioPlayer播放音频时声音太小

    设置下声音输出的扬声器就行了 代码如下 do { try AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSessionP ...

  6. jQuery基础知识总结二

     * DOM操作 *1 基本操作 * html() - 等价于innerHTML属性 * text() - 等价于textContent属性 * val() - 等价于value属性 * attr() ...

  7. kill 和killall----杀死进程

    1.根据进程ip查看进程名 Liunx中 通过进程名查找进程PID可以通过 pidof  [进程名] 来查找. 反过来 ,通过PID查找进程名则没有相关命令.但在linux根目录中,有一个/proc的 ...

  8. SpringBoot集成MyBatis的分页插件PageHelper(回头草)

    俗话说:好

  9. javaweb 登陆注册页面

    视图的数据修改,表中也修改引用工具类用<%@ page import=""%> <%@ page import="java.util.Date" ...

  10. Python第八天——Json

    json 模块 json 模块提供了非常完善的 Python 对象到 JSON 格式的转换 import json d = dict(name='Bob',age=20,score=88) json. ...