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. 如何自己写一个公用的NPM包

    以markdown-clear,创建过程为例,讲解整个NPM包创建和发布流程 1 如何创建一个包 1.1 创建并使用一个工程 在GitHub上新建一个仓库,其名markdown-clear clone ...

  2. 云计算——Google App Eng…

    云计算--Google App Engine(一) 编者:王尚 2014.04.12 20:20 介绍:Google App Engine提供一套开发组件让用户轻松的在本地构建和调试网络应用,之后能让 ...

  3. 用u盘装系统,进入bios后没有usb启动项怎么办

    开机按DEL进入BIOS(现在还这么说吧,不同的主板进入方法不太一样),找到BOOT选项. 选择Boot mood:legacy support(引导模式,逻辑支持) boot priorty:leg ...

  4. 起床困难综合症[NOI2014]

    [题解] 并不算很困难的贪心题.位运算毕竟是针对每一位的,从前向后处理,如果某一位1比0更优且可取1就使它为1.比较0和1的结果要单取这一位来看,但是题目中所给的参数并没有必要全部二进制分解,直接用十 ...

  5. Section 1.1 Greedy Gift Givers

    Greedy Gift Givers A group of NP (2 ≤ NP ≤ 10) uniquely named friends hasdecided to exchange gifts o ...

  6. WebGIS中前端JS生成等值面方法探讨

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在之前的博文<WebGIS中等值面展示的相关方案简析&g ...

  7. 高性能MySQL之【第十五章 备份与恢复】学习记录

      我们不打算包括的话题:      安全(访问备份,恢复数据的权限,文件是否需要加密)      备份存储在哪里,包括他们应该离源数据多远,以及如何将数据从源头移动到目的地      保留策略.审计 ...

  8. 使用DbFunctions来解决EF按照日期分组数据

    如下一张表 要进行MyDate的date部分进行分组,我们会发现如下写法会报异常 那么如何才能使linq正确转化为sql语句呢,这就要使用到了DbFunctions这个工具类 转到定义可以看到此类在e ...

  9. opencv 访问图像像素的三种方式

    访问图像中的像素 访问图像像素有三种可行的方法方法一:指针访问指针访问访问的速度最快,Mat类可以通过ptr函数得到图像任意一行的首地址,同时,Mat类的一些属性也可以用到公有属性 rows和cols ...

  10. Qt 无边框拖拽实现

    Qt 无边框拖拽实现 头文件定义: class TDragProxy:public QObject { Q_OBJECT public: TDragProxy(QWidget* parent); ~T ...