当前位置:  编程技术>java/j2ee

JAVA发送HTTP请求,返回HTTP响应内容,应用及实例代码

    来源: 互联网  发布时间:2014-11-02

    本文导语:  JDK 中提供了一些对无状态协议请求(HTTP )的支持,下面我就将我所写的一个小例子(组件)进行描述:首先让我们先构建一个请求类(HttpRequester )。该类封装了 JAVA 实现简单请求的代码,如下: 代码如下:import java.io.Buffered...

JDK 中提供了一些对无状态协议请求(HTTP )的支持,下面我就将我所写的一个小例子(组件)进行描述:
首先让我们先构建一个请求类(HttpRequester )。
该类封装了 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 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 params, 
            Map 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 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 params, 
            Map propertys) throws IOException { 
        return this.send(urlString, "POST", params, propertys); 
    } 

    /**
     * 发送HTTP请求
     * 
     * @param urlString
     * @return 响映对象
     * @throws IOException
     */ 
    private HttpRespons send(String urlString, String method, 
            Map parameters, Map 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(/tech-java/urlString/index.html); 
        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(); 
            StringBuffer temp = new StringBuffer(); 
            String line = bufferedReader.readLine(); 
            while (line != null) { 
                httpResponser.contentCollection.add(line); 
                temp.append(line).append("rn"); 
                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 ,由此来封装请求响应的结果数据,如下:

代码如下:

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 contentCollection; 

    public String getContent() { 
        return content; 
    } 

    public String getContentType() { 
        return contentType; 
    } 

    public int getCode() { 
        return code; 
    } 

    public String getMessage() { 
        return message; 
    } 

    public Vector 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 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."); 

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


    
 
 

您可能感兴趣的文章:

  • java命名空间javax.xml.ws.http接口httpbinding成员方法: http_binding定义参考
  • 为什么输http://www.china-java.net,会自动改为http://www.china-java.net:8081?
  • java命名空间java.net枚举proxy.type的类成员方法: http定义及介绍
  • Java HTTP 客户端开发包 jcabi-http
  • java命名空间javax.print.attribute.standard类referenceurischemessupported的类成员方法: http定义及介绍
  • Java HTTP客户端 http4j
  • java命名空间java.net类httpurlconnection的类成员方法: http_accepted定义及介绍
  • MM求助:怎样多线程下载http://java.sun.com上的东东? 用http方式,谢谢了.
  • java命名空间java.net类httpurlconnection的类成员方法: http_unauthorized定义及介绍
  • JCreator里为什么找不到java.servlet.* java.servlet.http.* 类 ,求助!
  • java命名空间java.net类httpurlconnection的类成员方法: http_created定义及介绍
  • 我按cn-java上实战EJB做的第一个EJB例子(最简单的),最后运行http://localhost:6888/hello/servlet/HelloServlet,结果提示“Http:404
  • java命名空间java.net类httpurlconnection的类成员方法: http_forbidden定义及介绍
  • Java HTTP 服务器 Reattore
  • java命名空间java.net类httpurlconnection的类成员方法: http_gone定义及介绍
  • 请问用javac编译一般*.java能通过,但不能编译Servlet写的*.java.提示javax.servlet.http不存在。
  • java命名空间java.net类httpurlconnection的类成员方法: http_ok定义及介绍
  • 嵌入式 Java HTTP引擎 AsyncWeb
  • java命名空间java.net类httpurlconnection的类成员方法: http_conflict定义及介绍
  • Ym Java HTTP Transfer
  • java命名空间java.net类httpurlconnection的类成员方法: http_reset定义及介绍
  • 怎样在一个JAVA应用程序里,向一个SERVLET发出HTTP请求(带参数)???
  • 一个小问题,JAVA中计算某个过程的执行时间,回答了马上给分,10分钟内响应啊
  • 这样将javascript嵌入到java中为什么有时有响应,有时却没有呢?
  • 为Java提供运行时响应时间分析 jHiccup
  • 关于java的控件响应鼠标消息的问题,请大虾帮忙
  • 学习JAVA响应事件的机制——————200分言谢————————
  • 为Java应用程序添加退出事件响应
  • java常见事件响应方法实例汇总
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java Servlet获取和设置cookie实例代码
  • 万般火急!关于java打印,已经得到printerJob实例,那么怎么通过它得到Pageable实例?
  • 可以有其他两个类的实例同时调用一个java实例的两个方法吗?
  • <java技术手册>与<java实例技术手册>这两本书怎么样?
  • Java单例模式实例简述
  • 寻求java加密算法及实例
  • java web start实例代码COPY不了,怎么办?
  • 请问哪里有《java实例技术手册》的电子书下载?100分赠送!
  • 请教:JAVA中说什么类的实例,那是怎么样的一个概念呢?
  • java实现大数加法(BigDecimal)的实例代码
  • Java究竟能干些什么呢?清高手们列举一些实例出来,跟帖有分.
  • java HashMap的keyset实例
  • java获取当前日期使用实例
  • java之super关键字用法实例解析
  • Java调用DOS实现定时关机的实例
  • java结束进程的实例代码
  • 急!大家谁有类似visio的java实例或代码?
  • java 如何获取对象实例的大小
  • 高分火速求解,请在线朋友回答:java自定义类怎样生成实例数组?( className[] N=new className[X];怎么不行?)
  • 刚学java想试编一个文本编辑器,各位能不能给推荐一些较好的参考程序或实例
  • Java位运算和逻辑运算的区别实例
  • java命名空间java.sql类types的类成员方法: java_object定义及介绍
  • 我想学JAVA ,是买THINK IN JAVA 还是JAVA2核心技术:卷1 好???
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: imageflavor定义及介绍
  • 请问Java高手,Java的优势在那里??,Java主要适合于开发哪类应用程序
  • java命名空间java.lang.management类managementfactory的类成员方法: getcompilationmxbean定义及介绍
  • 如何将java.util.Date转化为java.sql.Date?数据库中Date类型对应于java的哪个Date呢
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getlibrarypath定义及介绍
  • 谁有电子版的《Java编程思想第二版(Thinking in java second)》和《Java2编程详解(special edition java2)》?得到给分
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getstarttime定义及介绍
  • 本人想学java,请问java程序员的待遇如何,和java主要有几个比较强的方向


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3