`

HttpURLConnection简单用法

    博客分类:
  • java
阅读更多

HttpURLConnection为javaAPI提供的一种Rest访问的方式。其支持对Post,Delete,Get,Put等方式的访问。

以下为对于HttpURLConnection对Post等方式访问的一段代码。

view plaincopy to clipboardprint?

   1. package com.sw.study.urlConnection; 
   2.  
   3. import java.io.BufferedReader; 
   4. import java.io.InputStreamReader; 
   5. import java.io.OutputStream; 
   6. import java.net.HttpURLConnection; 
   7. import java.net.URL; 
   8. import java.net.URLConnection; 
   9. import java.util.HashMap; 
  10. import java.util.Map; 
  11.  
  12. public class URLConnectionUtil { 
  13.      
  14.     private static final String SERVLET_POST = "POST" ; 
  15.     private static final String SERVLET_GET = "GET" ; 
  16.     private static final String SERVLET_DELETE = "DELETE" ; 
  17.     private static final String SERVLET_PUT = "PUT" ; 
  18.      
  19.     private static String prepareParam(Map<String,Object> paramMap){ 
  20.         StringBuffer sb = new StringBuffer(); 
  21.         if(paramMap.isEmpty()){ 
  22.             return "" ; 
  23.         }else{ 
  24.             for(String key: paramMap.keySet()){ 
  25.                 String value = (String)paramMap.get(key); 
  26.                 if(sb.length()<1){ 
  27.                     sb.append(key).append("=").append(value); 
  28.                 }else{ 
  29.                     sb.append("&").append(key).append("=").append(value); 
  30.                 } 
  31.             } 
  32.             return sb.toString(); 
  33.         } 
  34.     } 
  35.      
  36.     public static void  doPost(String urlStr,Map<String,Object> paramMap ) throws Exception{ 
  37.         URL url = new URL(urlStr); 
  38.         HttpURLConnection conn = (HttpURLConnection)url.openConnection(); 
  39.         conn.setRequestMethod(SERVLET_POST); 
  40.         String paramStr = prepareParam(paramMap); 
  41.         conn.setDoInput(true); 
  42.         conn.setDoOutput(true); 
  43.         OutputStream os = conn.getOutputStream();      
  44.         os.write(paramStr.toString().getBytes("utf-8"));      
  45.         os.close();          
  46.          
  47.         BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
  48.         String line ; 
  49.         String result =""; 
  50.         while( (line =br.readLine()) != null ){ 
  51.             result += "\n"+line; 
  52.         } 
  53.         System.out.println(result); 
  54.         br.close(); 
  55.          
  56.     } 
  57.      
  58.     public static void  doGet(String urlStr,Map<String,Object> paramMap ) throws Exception{ 
  59.         String paramStr = prepareParam(paramMap); 
  60.         if(paramStr == null || paramStr.trim().length()<1){ 
  61.              
  62.         }else{ 
  63.             urlStr +="?"+paramStr; 
  64.         } 
  65.         System.out.println(urlStr); 
  66.         URL url = new URL(urlStr); 
  67.         HttpURLConnection conn = (HttpURLConnection)url.openConnection(); 
  68.         conn.setRequestMethod(SERVLET_PUT); 
  69.         conn.setRequestProperty("Content-Type","text/html; charset=UTF-8"); 
  70.          
  71.         conn.connect(); 
  72.         BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
  73.         String line ; 
  74.         String result =""; 
  75.         while( (line =br.readLine()) != null ){ 
  76.             result += "\n"+line; 
  77.         } 
  78.         System.out.println(result); 
  79.         br.close(); 
  80.     } 
  81.      
  82.     public static void doPut(String urlStr,Map<String,Object> paramMap) throws Exception{ 
  83.         URL url = new URL(urlStr); 
  84.         HttpURLConnection conn = (HttpURLConnection)url.openConnection(); 
  85.         conn.setRequestMethod(SERVLET_PUT); 
  86.         String paramStr = prepareParam(paramMap); 
  87.         conn.setDoInput(true); 
  88.         conn.setDoOutput(true); 
  89.         OutputStream os = conn.getOutputStream();      
  90.         os.write(paramStr.toString().getBytes("utf-8"));      
  91.         os.close();          
  92.          
  93.         BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
  94.         String line ; 
  95.         String result =""; 
  96.         while( (line =br.readLine()) != null ){ 
  97.             result += "\n"+line; 
  98.         } 
  99.         System.out.println(result); 
 100.         br.close(); 
 101.                  
 102.     } 
 103.      
 104.     public static void doDelete(String urlStr,Map<String,Object> paramMap) throws Exception{ 
 105.         String paramStr = prepareParam(paramMap); 
 106.         if(paramStr == null || paramStr.trim().length()<1){ 
 107.              
 108.         }else{ 
 109.             urlStr +="?"+paramStr; 
 110.         }    
 111.         System.out.println(urlStr); 
 112.         URL url = new URL(urlStr); 
 113.         HttpURLConnection conn = (HttpURLConnection)url.openConnection(); 
 114.         conn.setDoOutput(true); 
 115.         conn.setRequestMethod(SERVLET_DELETE); 
 116.         //屏蔽掉的代码是错误的,java.net.ProtocolException: HTTP method DELETE doesn't support output 
 117. /*      OutputStream os = conn.getOutputStream();     
 118.         os.write(paramStr.toString().getBytes("utf-8"));     
 119.         os.close();  */  
 120.          
 121.         if(conn.getResponseCode() ==200){ 
 122.             System.out.println("成功"); 
 123.         }else{ 
 124.             System.out.println(conn.getResponseCode()); 
 125.         } 
 126.     } 
 127.      
 128.     public static void main(String[] args) throws Exception{ 
 129.         String urlStr = "http://localhost:8080/SwTest/ReceiveDataServlet"; 
 130.         Map<String,Object> map = new HashMap<String,Object>(); 
 131.         map.put("username","张三"); 
 132.         map.put("password","88888"); 
 133. //      URLConnectionUtil.doGet(urlStr, map); 
 134. //      URLConnectionUtil.doPost(urlStr, map); 
 135. //      URLConnectionUtil.doPut(urlStr, map); 
 136.         URLConnectionUtil.doDelete(urlStr, map); 
 137.          
 138.     } 
 139.      
 140.      
 141. } 

方法中是存在重复的。有些方法是可以通过参数的改变来达到统一,但是那样的做法对于程序的扩展性会有很大的局限性。

还是对于每一种方式提供一个单独的方法进行访问比较好。

在Servlet端,获取参数可以通过

request.getInputStream,及request.getParamter来进行。

其中,当Rest访问传入参数是通过conn的outputStream来进行的,可以通过request.getInputStream来进行参数获取(Post方式可通用);

当以url?key=value方法传递参数时,可以通过request.getParamter来进行参数获取。(Post方式可通用)

其中request.getInputStream和request.getParamter两种方式不能同时出现。当request.getParamter运行的过程,也是输入流的读取过程。当输入流读取完成后,再次调用时无效的。

附上Servlet端程序

view plaincopy to clipboardprint?

   1. package com.sw.servlet; 
   2.  
   3. import java.io.BufferedReader; 
   4. import java.io.IOException; 
   5. import java.io.InputStreamReader; 
   6. import java.io.OutputStream; 
   7.  
   8. import javax.servlet.ServletException; 
   9. import javax.servlet.ServletInputStream; 
  10. import javax.servlet.http.HttpServlet; 
  11. import javax.servlet.http.HttpServletRequest; 
  12. import javax.servlet.http.HttpServletResponse; 
  13.  
  14. /**
  15.  * Servlet implementation class ReceiveDataServlet
  16.  */ 
  17. public class ReceiveDataServlet extends HttpServlet { 
  18.     private static final long serialVersionUID = 1L; 
  19.         
  20.     /**
  21.      * @see HttpServlet#HttpServlet()
  22.      */ 
  23.     public ReceiveDataServlet() { 
  24.         super(); 
  25.         // TODO Auto-generated constructor stub 
  26.     } 
  27.  
  28.     /**
  29.      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
  30.      */ 
  31.     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
  32.         System.out.println("----------get--------------");       
  33.         String username = new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8"); 
  34.         String password = new String(request.getParameter("password").getBytes("iso-8859-1"),"utf-8"); 
  35.         System.out.println(username); 
  36.         System.out.println(password); 
  37.         OutputStream os = response.getOutputStream(); 
  38.         os.write("get".getBytes("utf-8")); 
  39.     } 
  40.  
  41.     /**
  42.      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  43.      */ 
  44.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
  45.         System.out.println("----------post--------------"); 
  46.         BufferedReader br = new BufferedReader(new InputStreamReader((ServletInputStream)request.getInputStream())); 
  47.         String line = null; 
  48.         StringBuilder sb = new StringBuilder(); 
  49.         while((line = br.readLine())!=null){ 
  50.             sb.append(line); 
  51.         }        
  52.         System.out.println(sb.toString()); 
  53.         br.close(); 
  54. /*      String username = new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
  55.         String password = new String(request.getParameter("password").getBytes("iso-8859-1"),"utf-8");
  56.         System.out.println(username);
  57.         System.out.println(password);
  58. */      OutputStream os = response.getOutputStream(); 
  59.         os.write("post".getBytes("utf-8")); 
  60.     } 
  61.      
  62.     @Override 
  63.     protected void doDelete(HttpServletRequest request, HttpServletResponse response) 
  64.             throws ServletException, IOException { 
  65.         System.out.println("----------delete--------------"); 
  66.         String username = new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8"); 
  67.         String password = new String(request.getParameter("password").getBytes("iso-8859-1"),"utf-8"); 
  68.         System.out.println(username); 
  69.         System.out.println(password); 
  70.         OutputStream os = response.getOutputStream(); 
  71.         os.write("delete".getBytes("utf-8"));            
  72.     } 
  73.      
  74.     @Override 
  75.     protected void doPut(HttpServletRequest request, HttpServletResponse response) 
  76.             throws ServletException, IOException { 
  77.         System.out.println("----------put--------------"); 
  78.          
  79.     /*  BufferedReader br = new BufferedReader(new InputStreamReader((ServletInputStream)request.getInputStream()));
  80.         String line = null;
  81.         StringBuilder sb = new StringBuilder();
  82.         while((line = br.readLine())!=null){
  83.             sb.append(line);
  84.         }       
  85.         System.out.println(sb.toString());
  86.         br.close();*/ 
  87.          
  88.         String username = new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8"); 
  89.         String password = new String(request.getParameter("password").getBytes("iso-8859-1"),"utf-8"); 
  90.         System.out.println(username); 
  91.         System.out.println(password); 
  92.         OutputStream os = response.getOutputStream(); 
  93.         os.write("put".getBytes("utf-8"));   
  94.     } 
  95.  
  96. } 

程序中对于request.getInputStream和getParameter的获取方式可能说明的会多少有些问题,我也是通过几组测试后得出的结论。肯定有我没有测试到得。如果有问题,请指出,我会再看到评论后进行测试,修改。

另外,Apache的HttpClient非常好。封装的详细。在我的工作中也用到过,在以后会对于HttpClient进行有些单独的程序笔记。

这里HttpUrlConnection是同事在别的项目中用到的,用法比较简单,我大体给他简单讲解了一下,简明扼要,功能完备,还是很方便,

所以在这里记下来,留个笔记吧。

分享到:
评论

相关推荐

    Android 简单使用 HttpURLConnection

    本篇文章将深入探讨如何在Android中简单使用`HttpURLConnection`进行网络请求。 首先,了解`HttpURLConnection`的基本用法。在Android中,网络操作通常在子线程(非UI线程)中进行,以避免阻塞主线程导致应用无响应...

    使用HttpURLConnection下载图片

    在本例中,我们将探讨如何使用`HttpURLConnection`来下载图片,这是一个基础但实用的网络编程任务。下面我们将详细介绍这个过程,并涉及到的相关知识点。 1. **HttpURLConnection简介**: `HttpURLConnection`是`...

    HttpURLConnection和简单的Android服务器交互

    本主题将深入探讨如何使用HttpURLConnection进行Android与服务器的简单交互,以及相关的知识点。 **HttpURLConnection简介** HttpURLConnection是Java标准库中的一个类,它是基于HTTP协议实现的,可以用来发送HTTP...

    使用HttpURLConnection发送短信

    ### 使用HttpURLConnection发送短信 在Java开发中,通过网络接口实现短信发送是一种常见的应用场景,例如在用户注册、找回密码等场景下验证用户身份时。本文将详细介绍如何利用`HttpURLConnection`来实现短信发送...

    AsyncTask结合HttpUrlConnection的例子

    本例子是关于如何将`AsyncTask`与`HttpURLConnection`结合,实现一个简单的网络请求。 `AsyncTask`是Android提供的轻量级异步任务框架,它允许开发者在后台线程执行耗时操作,并在主线程更新UI。`AsyncTask`包含三...

    Android httpUrlConnection Post方式访问网络简单demo

    2. **设置请求方法**:默认情况下,`HttpURLConnection`会使用GET方法,但我们需要POST,所以需要调用`setRequestMethod("POST")`。 3. **允许输出**:POST请求需要向服务器发送数据,因此需要调用`setDoOutput...

    HttpURLConnection 的使用二

    1. **设置请求方法**:默认情况下,`HttpURLConnection`使用GET方法,但可以通过`setRequestMethod()`方法设置POST、PUT、DELETE等其他HTTP方法。 2. **设置请求头**:通过`setRequestProperty()`或`...

    本示例使用HttpUrlConnection实现上传文件

    1. **创建连接**:使用`URL`对象构造一个`HttpURLConnection`实例,通常会通过`openConnection()`方法来实现。例如: ```java URL url = new URL("http://yourserver.com/upload"); HttpURLConnection connection...

    httpurlconnection xml

    在Android开发中,...综上所述,这个示例涵盖了使用HTTPURLConnection进行网络通信的基本流程,XML数据的解析,以及AndroidX框架下的类组织和使用。开发者需要理解这些概念,并根据实际需求进行相应的扩展和优化。

    httpurlconnection 获取服务器数据并解析

    本篇将深入讲解如何使用HTTPURLConnection获取服务器数据并进行JSON解析。 首先,我们需要理解HTTP的基础概念。HTTP(超文本传输协议)是一种应用层协议,用于在Web上交换数据。HTTPURLConnection类提供了创建和...

    HttpURLConnection实现单线程下载,多线程下载,多线程续点下载

    本教程将详细讲解如何使用HttpURLConnection实现单线程、多线程下载以及多线程续点下载。 **一、单线程下载** 单线程下载是最基础的下载方式,它通过一个连接获取服务器资源并写入本地文件。以下是一个简单的单...

    java后台调用HttpURLConnection类模拟浏览器请求实例(可用于接口调用)

    本篇文章将深入讲解如何使用`HttpURLConnection`类来模拟浏览器请求,并通过实例展示其在接口调用中的应用。 首先,`HttpURLConnection`是`java.net.URLConnection`的一个子类,用于处理HTTP协议。在使用`...

    HttpURLConnection获取webService上的值

    以下是一个简单的示例,展示了如何使用HttpURLConnection发送GET请求: ```java URL url = new URL("http://your-web-service-url"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); ...

    Httpurlconnection请求网络数据,使用Android Studio.zip

    相较于其他网络库如OkHttp或Volley,`HttpURLConnection`更轻量级,适合小规模或者简单的网络请求。本教程将深入探讨如何使用`HttpURLConnection`在Android Studio中请求网络数据,包括文本和图片。 首先,我们需要...

    基于Socket和HttpURLConnection的爬虫实例

    本实例将重点讲解如何利用Java中的Socket和HttpURLConnection库来实现一个简单的网络爬虫。这两个类是Java标准库提供的基础网络通信工具,对于理解HTTP协议和网络编程具有重要意义。 首先,让我们了解Socket编程。...

    HttpUrlConnection下载文件

    然后调用`openConnection()`方法打开与该URL的连接,得到一个`URLConnection`对象,再将其类型转换为`HttpURLConnection`,以便使用HTTP特定的功能。 ```java URL url = new URL(...

    xamarin学习笔记A15(安卓OkHttp3和HttpURLConnection)上

    而对于简单的项目或者对性能要求不高的场景,HttpURLConnection则足够使用。 2. OkHttp3的拦截器和缓存机制使得它在处理复杂的网络需求时更具优势,而HttpURLConnection的简洁性可能更适合初学者或者小规模项目。 ...

    【Java】java.net.HttpURLConnection的使用.doc

    在Java编程中,`java.net.HttpURLConnection`是用于处理HTTP协议的基本类,它提供了一种与HTTP服务器通信的简单方式。下面将详细讲解如何使用`HttpURLConnection`进行网页内容获取、Cookie管理以及POST方式的数据...

    HttpUrlConnection:说明HttpUrlConnection

    本文将深入探讨HttpUrlConnection的使用、功能以及其在实际开发中的应用。 一、HttpUrlConnection简介 HttpUrlConnection是java.net.URL类的一个子类,提供了与URL建立连接并执行HTTP协议的方法。它支持多种HTTP...

    http.rar httpurlconnection

    无论GET还是POST,都可以通过`InputStream`读取服务器返回的数据,通过`HttpURLConnection.getResponseCode()`检查服务器响应的状态码,以判断请求是否成功。 在实际开发中,HTTP URLConnection相比于其他HTTP...

Global site tag (gtag.js) - Google Analytics