码迷,mamicode.com
首页 > 编程语言 > 详细

【JAVA】通过URLConnection/HttpURLConnection发送HTTP请求的方法

时间:2016-05-15 18:04:52      阅读:341      评论:0      收藏:0      [点我收藏+]

标签:

 Java原生的API可用于发送HTTP请求

 即java.net.URL、java.net.URLConnection,JDK自带的类;

 

 1.通过统一资源定位器(java.net.URL)获取连接器(java.net.URLConnection)

 2.设置请求的参数

 3.发送请求

 4.以输入流的形式获取返回内容

 5.关闭输入流

  • 封装请求类
    技术分享
      1 package com.util;
      2 
      3 import java.io.BufferedReader;
      4 import java.io.IOException;
      5 import java.io.InputStream;
      6 import java.io.InputStreamReader;
      7 import java.io.OutputStream;
      8 import java.io.OutputStreamWriter;
      9 import java.net.HttpURLConnection;
     10 import java.net.MalformedURLException;
     11 import java.net.URL;
     12 import java.net.URLConnection;
     13 import java.util.Iterator;
     14 import java.util.Map;
     15 
     16 
     17 
     18 /**
     19  * Java原生的API可用于发送HTTP请求
     20  * 即java.net.URL、java.net.URLConnection,JDK自带的类;
     21  * 
     22  * 1.通过统一资源定位器(java.net.URL)获取连接器(java.net.URLConnection)
     23  * 2.设置请求的参数
     24  * 3.发送请求
     25  * 4.以输入流的形式获取返回内容
     26  * 5.关闭输入流
     27  * 
     28  * @author H__D
     29  *
     30  */
     31 public class HttpRequestor  {
     32     
     33     //post请求
     34     public static final String HTTP_POST = "POST";
     35     
     36     //get请求
     37     public static final String HTTP_GET = "GET";
     38     
     39     // utf-8字符编码
     40     public static final String CHARSET_UTF_8 = "utf-8";
     41     
     42     // HTTP内容类型。如果未指定ContentType,默认为TEXT/HTML
     43     public static final String CONTENT_TYPE_TEXT_HTML = "text/xml"; 
     44     
     45     // HTTP内容类型。相当于form表单的形式,提交暑假
     46     public static final String CONTENT_TYPE_FORM_URL = "application/x-www-form-urlencoded"; 
     47     
     48     //请求超时时间
     49     public static final int SEND_REQUEST_TIME_OUT = 5000;
     50     
     51     //将读超时时间
     52     public static final int READ_TIME_OUT = 5000;
     53     
     54     
     55     /**
     56      * http请求的主要方法
     57      * @param requestType 请求类型
     58      * @param urlStr 请求地址
     59      * @param body 请求发送内容
     60      * @return 返回内容
     61      */
     62     public static String requestMethod(String requestType,String urlStr,String body) {
     63 
     64         //是否有http正文提交
     65         boolean isDoInput = false;
     66         if(body != null && body.length() > 0) isDoInput = true;
     67         OutputStream outputStream = null;
     68         OutputStreamWriter outputStreamWriter = null;
     69         InputStream inputStream = null;
     70         InputStreamReader inputStreamReader = null;
     71         BufferedReader reader = null;
     72         StringBuffer resultBuffer = new StringBuffer();
     73         String tempLine = null;
     74         try {
     75             // 统一资源
     76             URL url = new URL(urlStr);
     77             // 连接类的父类,抽象类
     78             URLConnection urlConnection = url.openConnection();
     79             // http的连接类
     80             HttpURLConnection httpURLConnection = (HttpURLConnection) urlConnection;
     81 
     82             
     83             // 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在   
     84             // http正文内,因此需要设为true, 默认情况下是false;   
     85             if(isDoInput){
     86                 httpURLConnection.setDoOutput(true);
     87                 httpURLConnection.setRequestProperty("Content-Length", String.valueOf(body.length()));
     88             }
     89             // 设置是否从httpUrlConnection读入,默认情况下是true;   
     90             httpURLConnection.setDoInput(true);
     91             //设置一个指定的超时值(以毫秒为单位)
     92             httpURLConnection.setConnectTimeout(SEND_REQUEST_TIME_OUT);
     93             //将读超时设置为指定的超时,以毫秒为单位。
     94             httpURLConnection.setReadTimeout(READ_TIME_OUT);
     95             // Post 请求不能使用缓存   
     96             httpURLConnection.setUseCaches(false);
     97             //设置字符编码
     98             httpURLConnection.setRequestProperty("Accept-Charset", CHARSET_UTF_8);
     99             //设置内容类型
    100             httpURLConnection.setRequestProperty("Content-Type", CONTENT_TYPE_FORM_URL);
    101             // 设定请求的方法,默认是GET
    102             httpURLConnection.setRequestMethod(requestType);
    103             
    104             //打开到此 URL 引用的资源的通信链接(如果尚未建立这样的连接)。 
    105             //如果在已打开连接(此时 connected 字段的值为 true)的情况下调用 connect 方法,则忽略该调用。 
    106             httpURLConnection.connect();
    107 
    108             if(isDoInput){
    109                 outputStream = httpURLConnection.getOutputStream();
    110                 outputStreamWriter = new OutputStreamWriter(outputStream);
    111                 outputStreamWriter.write(body);
    112                 outputStreamWriter.flush();// 刷新
    113             }
    114             if (httpURLConnection.getResponseCode() >= 300) {
    115                 throw new Exception(
    116                         "HTTP Request is not success, Response code is " + httpURLConnection.getResponseCode());
    117             }
    118 
    119             if (httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
    120                 inputStream = httpURLConnection.getInputStream();
    121                 inputStreamReader = new InputStreamReader(inputStream);
    122                 reader = new BufferedReader(inputStreamReader);
    123 
    124                 while ((tempLine = reader.readLine()) != null) {
    125                     resultBuffer.append(tempLine);
    126                     resultBuffer.append("\n");
    127                 }
    128             }
    129 
    130         } catch (MalformedURLException e) {
    131             // TODO Auto-generated catch block
    132             e.printStackTrace();
    133         } catch (IOException e) {
    134             // TODO Auto-generated catch block
    135             e.printStackTrace();
    136         } catch (Exception e) {
    137             // TODO Auto-generated catch block
    138             e.printStackTrace();
    139         } finally {//关闭流
    140             
    141             try {
    142                 if (outputStreamWriter != null) {
    143                     outputStreamWriter.close();
    144                 }
    145             } catch (Exception e) {
    146                 // TODO Auto-generated catch block
    147                 e.printStackTrace();
    148             }
    149             try {
    150                 if (outputStream != null) {
    151                     outputStream.close();
    152                 }
    153             } catch (Exception e) {
    154                 // TODO Auto-generated catch block
    155                 e.printStackTrace();
    156             }
    157             try {
    158                 if (reader != null) {
    159                     reader.close();
    160                 }
    161             } catch (Exception e) {
    162                 // TODO Auto-generated catch block
    163                 e.printStackTrace();
    164             }
    165             try {
    166                 if (inputStreamReader != null) {
    167                     inputStreamReader.close();
    168                 }
    169             } catch (Exception e) {
    170                 // TODO Auto-generated catch block
    171                 e.printStackTrace();
    172             }
    173             try {
    174                 if (inputStream != null) {
    175                     inputStream.close();
    176                 }
    177             } catch (Exception e) {
    178                 // TODO Auto-generated catch block
    179                 e.printStackTrace();
    180             }
    181         }
    182         return resultBuffer.toString();
    183     }
    184     
    185     /**
    186      * 将map集合的键值对转化成:key1=value1&key2=value2 的形式
    187      * @param parameterMap 需要转化的键值对集合
    188      * @return 字符串
    189      */
    190     public static String convertStringParamter(Map parameterMap ){
    191         StringBuffer parameterBuffer = new StringBuffer();
    192         if (parameterMap != null) {
    193             Iterator iterator = parameterMap.keySet().iterator();
    194             String key = null;
    195             String value = null;
    196             while (iterator.hasNext()) {
    197                 key = (String)iterator.next();
    198                 if (parameterMap.get(key) != null) {
    199                     value = (String)parameterMap.get(key);
    200                 } else {
    201                     value = "";
    202                 }
    203                 parameterBuffer.append(key).append("=").append(value);
    204                 if (iterator.hasNext()) {
    205                     parameterBuffer.append("&");
    206                 }
    207             }
    208         }
    209         return parameterBuffer.toString();
    210     }
    211     
    212     
    213     
    214 
    215     public static void main(String[] args) throws MalformedURLException {
    216         
    217          System.out.println(requestMethod(HTTP_GET, "http://127.0.0.1:8080/test/TestHttpRequestServlet", "username=123&password=我是谁"));
    218     
    219     }
    220 
    221 }
    HttpRequestor

     

  • 测试Servlet
    技术分享
     1 package com.servlet;
     2 
     3 import java.io.IOException;
     4 
     5 import javax.servlet.ServletException;
     6 import javax.servlet.http.HttpServlet;
     7 import javax.servlet.http.HttpServletRequest;
     8 import javax.servlet.http.HttpServletResponse;
     9 
    10 public class TestHttpRequestServelt extends HttpServlet {
    11 
    12 
    13     @Override
    14     protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    15 
    16         System.out.println("this is a TestHttpRequestServlet");
    17         request.setCharacterEncoding("utf-8");
    18         
    19         String username = request.getParameter("username");
    20         String password = request.getParameter("password");
    21         
    22         System.out.println(username);
    23         System.out.println(password);
    24         
    25         response.setContentType("text/plain; charset=UTF-8");
    26         response.setCharacterEncoding("UTF-8");
    27         response.getWriter().write("This is ok!");
    28         
    29     }
    30 }
    TestHttpRequestServelt

     

 

 

  • web.xml配置
    技术分享
     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
     3   <display-name>test</display-name>
     4   
     5   <servlet>
     6       <servlet-name>TestHttpRequestServlet</servlet-name>
     7       <servlet-class>com.servlet.TestHttpRequestServelt</servlet-class>
     8   </servlet>
     9   
    10   <servlet-mapping>
    11       <servlet-name>TestHttpRequestServlet</servlet-name>
    12       <url-pattern>/TestHttpRequestServlet</url-pattern>
    13   </servlet-mapping>
    14   
    15   <welcome-file-list>
    16     <welcome-file>index.html</welcome-file>
    17     <welcome-file>index.htm</welcome-file>
    18     <welcome-file>index.jsp</welcome-file>
    19     <welcome-file>default.html</welcome-file>
    20     <welcome-file>default.htm</welcome-file>
    21     <welcome-file>default.jsp</welcome-file>
    22   </welcome-file-list>
    23 </web-app>
    web.xml

     

 

【JAVA】通过URLConnection/HttpURLConnection发送HTTP请求的方法

标签:

原文地址:http://www.cnblogs.com/h--d/p/5495524.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!