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. 【bzoj2819】Nim

    Description 著名游戏设计师vfleaking,最近迷上了Nim.普通的Nim游戏为:两个人进行游戏,N堆石子,每回合可以取其中某一堆的任意多个,可以取完,但不可以不取.谁不能取谁输.这个游 ...

  2. 解决Ubuntu手动安装vim后无法正常…

    首先声明这个问题很坑爹~ 问题描述:下载了vim7.3版本的源码,在虚拟机里面的ubuntu12中手动安装成功后.在使用vim编辑文档时,进入编辑模式出现如下现象:1.使用方向键会打印出"A ...

  3. wamp问题:关于另个php.ini文件的”…

    一.现象解说 修改从图表打开的php.ini文件,重启apache后,我们的问题没有解决... 二.解决方法 1.php.ini的位置 wamp/apache2/bin/php.ini wamp/ph ...

  4. Hadoop 新生报道(三) hadoop基础概念

    一.NameNode,SeconderyNamenode,DataNode NameNode,DataNode,SeconderyNamenode都是进程,运行在节点上. 1.NameNode:had ...

  5. opencv3+版本感觉还是不稳定啊

    opencv3+版本感觉还是不稳定啊,还是安装opencv2的版本比较好.特征匹配需要下载额外的库,但是camke的时候就是有错误....也是醉了,折磨的我死去活来的两三天了. 现在是opencv3. ...

  6. 手脱ASPack

    ESP定律到达OEP,重新分析代码块 在菜单栏中找到OllyDump插件,该插件的窗口的弹了出来,有一些选项可供我们修改,我们可以对Base of Code进行修改,这里Base of Code = ...

  7. Thinkphp5 实现悲观锁

    悲观锁介绍(百科): 悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态.悲观锁的实现,往往依 ...

  8. Webapi文档描述-swagger优化

    一.前言 最近做的项目使用WebApi,采取前后端分离的方式,后台提供API接口给前端开发人员.这个过程中遇到一个问题后台开发人员怎么提供接口说明文档给前端开发人员,最初打算使用word.Xmind思 ...

  9. Mybatis(二)

    1 Mybatis映射文件--增删改查 POJO类 package cn.demo1; import org.apache.ibatis.type.Alias; /** * 描述:POJO */ @A ...

  10. noip普及组2004 不高兴的津津

    描述 津津上初中了.妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班.另外每周妈妈还会送她去学习朗诵.舞蹈和钢琴.但是津津如果一天上课超过八个小时就会不高兴,而且, ...