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

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

     

  • 测试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 }
    复制代码

       

  • 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>

猜你喜欢

转载自blog.csdn.net/h12kjgj/article/details/80597841