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. 结合bootstrap fileinput插件和Bootstrap-table表格插件,实现文件上传、预览、提交的导入Excel数据操作流程

    1.bootstrap-fileinpu的简单介绍 在前面的随笔,我介绍了Bootstrap-table表格插件的具体项目应用过程,本篇随笔介绍另外一个Bootstrap FieInput插件的使用, ...

  2. Selenium+Java显示等待和隐式等待

    描述:用来操作界面上的等待时间,显示等待是等待某一条件满足,条件满足后进行后面的操作:隐式等待是给出一个等待时间,在时间到达之前若满足条件,则立即执行后续操作. public class TestSe ...

  3. 转:SpringMVC浅谈

    因为项目文案需要,于是乎翻阅spring相关资料.顿觉该篇不错详尽易懂,特转载之. 转载出处: http://blog.csdn.net/gane_cheng/article/details/5278 ...

  4. RobotFramework自动化测试框架-移动手机自动化测试AppiumLibrary介绍

    在使用AppiumLibrary库时,需要预先安装好Appium自动化工具,Appium官网地址为:http://appium.io/ Appium的GitHub地址为:https://github. ...

  5. Eclipse创建Maven项目报错的解决

    报错1:Could not resolve archetype org.apache.maven.archetypes:maven-archetype-quickstart 起因:删除一个用quick ...

  6. 【FAQ系列】:DB服务器产生大量物理读问题优化思路

    一 [现象] 1.7点到9点IO监控指标util特别高,如下: 2 .查看读写情况:读产生很高的物理IO,如下 [分析]:对比其他服务器,buffer pool都是80G,正常情况下热点数据都是从bu ...

  7. oracle 内连接,外连接

    --内连接  inner join  ...  on  --左外连接 left join ... on  --右外连接  right join ... on 列: select * from stud ...

  8. python基础===随机打印txt文件中的某一行

    def find(): txt = open(r'F:\send1.txt','rb') data = txt.read().decode('utf-8') #python3一定要加上这句不然会编码报 ...

  9. Canvas 旋转风车绘制

    写在前面:   亲爱的朋友们大家好,鄙人自学前端,第一次写博客,写的不好的地方,烦请同学们谅解,如果本文对你有一丁点帮助,还请劳驾您给我点个赞,您的认可将是我坚持下去的强大动力!谢谢! 在进行教学之前 ...

  10. 《Python学习手册》读书笔记【转载】

    转载:http://www.cnblogs.com/wuyuegb2312/archive/2013/02/26/2910908.html 之前为了编写一个svm分词的程序而简单学了下Python,觉 ...