JAVA发送HTTP请求经典收藏

2024-05-13 13:38

本文主要是介绍JAVA发送HTTP请求经典收藏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

JDK 中提供了一些对无状态协议请求(HTTP )的支持,下面我就将我所写的一个小例子(组件)进行描述:

 首先让我们先构建一个请求类(HttpRequester )。

该类封装了 JAVA 实现简单请求的代码,如下:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. import java.io.BufferedReader;  
  2. import java.io.IOException;  
  3. import java.io.InputStream;  
  4. import java.io.InputStreamReader;  
  5. import java.net.HttpURLConnection;  
  6. import java.net.URL;  
  7. import java.nio.charset.Charset;  
  8. import java.util.Map;  
  9. import java.util.Vector;  
  10.    
  11. /** 
  12.  * HTTP请求对象 
  13.  *  
  14.  * @author YYmmiinngg 
  15.  */  
  16. public class HttpRequester {  
  17.     private String defaultContentEncoding;  
  18.    
  19.     public HttpRequester() {  
  20.         this.defaultContentEncoding = Charset.defaultCharset().name();  
  21.     }  
  22.    
  23.     /** 
  24.      * 发送GET请求 
  25.      *  
  26.      * @param urlString 
  27.      *            URL地址 
  28.      * @return 响应对象 
  29.      * @throws IOException 
  30.      */  
  31.     public HttpRespons sendGet(String urlString) throws IOException {  
  32.         return this.send(urlString, "GET"nullnull);  
  33.     }  
  34.    
  35.     /** 
  36.      * 发送GET请求 
  37.      *  
  38.      * @param urlString 
  39.      *            URL地址 
  40.      * @param params 
  41.      *            参数集合 
  42.      * @return 响应对象 
  43.      * @throws IOException 
  44.      */  
  45.     public HttpRespons sendGet(String urlString, Map<String, String> params)  
  46.             throws IOException {  
  47.         return this.send(urlString, "GET", params, null);  
  48.     }  
  49.    
  50.     /** 
  51.      * 发送GET请求 
  52.      *  
  53.      * @param urlString 
  54.      *            URL地址 
  55.      * @param params 
  56.      *            参数集合 
  57.      * @param propertys 
  58.      *            请求属性 
  59.      * @return 响应对象 
  60.      * @throws IOException 
  61.      */  
  62.     public HttpRespons sendGet(String urlString, Map<String, String> params,  
  63.             Map<String, String> propertys) throws IOException {  
  64.         return this.send(urlString, "GET", params, propertys);  
  65.     }  
  66.    
  67.     /** 
  68.      * 发送POST请求 
  69.      *  
  70.      * @param urlString 
  71.      *            URL地址 
  72.      * @return 响应对象 
  73.      * @throws IOException 
  74.      */  
  75.     public HttpRespons sendPost(String urlString) throws IOException {  
  76.         return this.send(urlString, "POST"nullnull);  
  77.     }  
  78.    
  79.     /** 
  80.      * 发送POST请求 
  81.      *  
  82.      * @param urlString 
  83.      *            URL地址 
  84.      * @param params 
  85.      *            参数集合 
  86.      * @return 响应对象 
  87.      * @throws IOException 
  88.      */  
  89.     public HttpRespons sendPost(String urlString, Map<String, String> params)  
  90.             throws IOException {  
  91.         return this.send(urlString, "POST", params, null);  
  92.     }  
  93.    
  94.     /** 
  95.      * 发送POST请求 
  96.      *  
  97.      * @param urlString 
  98.      *            URL地址 
  99.      * @param params 
  100.      *            参数集合 
  101.      * @param propertys 
  102.      *            请求属性 
  103.      * @return 响应对象 
  104.      * @throws IOException 
  105.      */  
  106.     public HttpRespons sendPost(String urlString, Map<String, String> params,  
  107.             Map<String, String> propertys) throws IOException {  
  108.         return this.send(urlString, "POST", params, propertys);  
  109.     }  
  110.    
  111.     /** 
  112.      * 发送HTTP请求 
  113.      *  
  114.      * @param urlString 
  115.      * @return 响映对象 
  116.      * @throws IOException 
  117.      */  
  118.     private HttpRespons send(String urlString, String method,  
  119.             Map<String, String> parameters, Map<String, String> propertys)  
  120.             throws IOException {  
  121.         HttpURLConnection urlConnection = null;  
  122.    
  123.         if (method.equalsIgnoreCase("GET") && parameters != null) {  
  124.             StringBuffer param = new StringBuffer();  
  125.             int i = 0;  
  126.             for (String key : parameters.keySet()) {  
  127.                 if (i == 0)  
  128.                     param.append("?");  
  129.                 else  
  130.                     param.append("&");  
  131.                 param.append(key).append("=").append(parameters.get(key));  
  132.                 i++;  
  133.             }  
  134.             urlString += param;  
  135.         }  
  136.         URL url = new URL(urlString);  
  137.         urlConnection = (HttpURLConnection) url.openConnection();  
  138.    
  139.         urlConnection.setRequestMethod(method);  
  140.         urlConnection.setDoOutput(true);  
  141.         urlConnection.setDoInput(true);  
  142.         urlConnection.setUseCaches(false);  
  143.    
  144.         if (propertys != null)  
  145.             for (String key : propertys.keySet()) {  
  146.                 urlConnection.addRequestProperty(key, propertys.get(key));  
  147.             }  
  148.    
  149.         if (method.equalsIgnoreCase("POST") && parameters != null) {  
  150.             StringBuffer param = new StringBuffer();  
  151.             for (String key : parameters.keySet()) {  
  152.                 param.append("&");  
  153.                 param.append(key).append("=").append(parameters.get(key));  
  154.             }  
  155.             urlConnection.getOutputStream().write(param.toString().getBytes());  
  156.             urlConnection.getOutputStream().flush();  
  157.             urlConnection.getOutputStream().close();  
  158.         }  
  159.    
  160.         return this.makeContent(urlString, urlConnection);  
  161.     }  
  162.    
  163.     /** 
  164.      * 得到响应对象 
  165.      *  
  166.      * @param urlConnection 
  167.      * @return 响应对象 
  168.      * @throws IOException 
  169.      */  
  170.     private HttpRespons makeContent(String urlString,  
  171.             HttpURLConnection urlConnection) throws IOException {  
  172.         HttpRespons httpResponser = new HttpRespons();  
  173.         try {  
  174.             InputStream in = urlConnection.getInputStream();  
  175.             BufferedReader bufferedReader = new BufferedReader(  
  176.                     new InputStreamReader(in));  
  177.             httpResponser.contentCollection = new Vector<String>();  
  178.             StringBuffer temp = new StringBuffer();  
  179.             String line = bufferedReader.readLine();  
  180.             while (line != null) {  
  181.                 httpResponser.contentCollection.add(line);  
  182.                 temp.append(line).append("\r\n");  
  183.                 line = bufferedReader.readLine();  
  184.             }  
  185.             bufferedReader.close();  
  186.    
  187.             String ecod = urlConnection.getContentEncoding();  
  188.             if (ecod == null)  
  189.                 ecod = this.defaultContentEncoding;  
  190.    
  191.             httpResponser.urlString = urlString;  
  192.    
  193.             httpResponser.defaultPort = urlConnection.getURL().getDefaultPort();  
  194.             httpResponser.file = urlConnection.getURL().getFile();  
  195.             httpResponser.host = urlConnection.getURL().getHost();  
  196.             httpResponser.path = urlConnection.getURL().getPath();  
  197.             httpResponser.port = urlConnection.getURL().getPort();  
  198.             httpResponser.protocol = urlConnection.getURL().getProtocol();  
  199.             httpResponser.query = urlConnection.getURL().getQuery();  
  200.             httpResponser.ref = urlConnection.getURL().getRef();  
  201.             httpResponser.userInfo = urlConnection.getURL().getUserInfo();  
  202.    
  203.             httpResponser.content = new String(temp.toString().getBytes(), ecod);  
  204.             httpResponser.contentEncoding = ecod;  
  205.             httpResponser.code = urlConnection.getResponseCode();  
  206.             httpResponser.message = urlConnection.getResponseMessage();  
  207.             httpResponser.contentType = urlConnection.getContentType();  
  208.             httpResponser.method = urlConnection.getRequestMethod();  
  209.             httpResponser.connectTimeout = urlConnection.getConnectTimeout();  
  210.             httpResponser.readTimeout = urlConnection.getReadTimeout();  
  211.    
  212.             return httpResponser;  
  213.         } catch (IOException e) {  
  214.             throw e;  
  215.         } finally {  
  216.             if (urlConnection != null)  
  217.                 urlConnection.disconnect();  
  218.         }  
  219.     }  
  220.    
  221.     /** 
  222.      * 默认的响应字符集 
  223.      */  
  224.     public String getDefaultContentEncoding() {  
  225.         return this.defaultContentEncoding;  
  226.     }  
  227.    
  228.     /** 
  229.      * 设置默认的响应字符集 
  230.      */  
  231.     public void setDefaultContentEncoding(String defaultContentEncoding) {  
  232.         this.defaultContentEncoding = defaultContentEncoding;  
  233.     }  
  234. }  


 

 

其次我们来看看响应对象(HttpRespons )。  响应对象其实只是一个数据BEAN ,由此来封装请求响应的结果数据,如下:

 

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. import java.util.Vector;  
  2.    
  3. /** 
  4.  * 响应对象 
  5.  */  
  6. public class HttpRespons {  
  7.    
  8.     String urlString;  
  9.    
  10.     int defaultPort;  
  11.    
  12.     String file;  
  13.    
  14.     String host;  
  15.    
  16.     String path;  
  17.    
  18.     int port;  
  19.    
  20.     String protocol;  
  21.    
  22.     String query;  
  23.    
  24.     String ref;  
  25.    
  26.     String userInfo;  
  27.    
  28.     String contentEncoding;  
  29.    
  30.     String content;  
  31.    
  32.     String contentType;  
  33.    
  34.     int code;  
  35.    
  36.     String message;  
  37.    
  38.     String method;  
  39.    
  40.     int connectTimeout;  
  41.    
  42.     int readTimeout;  
  43.    
  44.     Vector<String> contentCollection;  
  45.    
  46.     public String getContent() {  
  47.         return content;  
  48.     }  
  49.    
  50.     public String getContentType() {  
  51.         return contentType;  
  52.     }  
  53.    
  54.     public int getCode() {  
  55.         return code;  
  56.     }  
  57.    
  58.     public String getMessage() {  
  59.         return message;  
  60.     }  
  61.    
  62.     public Vector<String> getContentCollection() {  
  63.         return contentCollection;  
  64.     }  
  65.    
  66.     public String getContentEncoding() {  
  67.         return contentEncoding;  
  68.     }  
  69.    
  70.     public String getMethod() {  
  71.         return method;  
  72.     }  
  73.    
  74.     public int getConnectTimeout() {  
  75.         return connectTimeout;  
  76.     }  
  77.    
  78.     public int getReadTimeout() {  
  79.         return readTimeout;  
  80.     }  
  81.    
  82.     public String getUrlString() {  
  83.         return urlString;  
  84.     }  
  85.    
  86.     public int getDefaultPort() {  
  87.         return defaultPort;  
  88.     }  
  89.    
  90.     public String getFile() {  
  91.         return file;  
  92.     }  
  93.    
  94.     public String getHost() {  
  95.         return host;  
  96.     }  
  97.    
  98.     public String getPath() {  
  99.         return path;  
  100.     }  
  101.    
  102.     public int getPort() {  
  103.         return port;  
  104.     }  
  105.    
  106.     public String getProtocol() {  
  107.         return protocol;  
  108.     }  
  109.    
  110.     public String getQuery() {  
  111.         return query;  
  112.     }  
  113.    
  114.     public String getRef() {  
  115.         return ref;  
  116.     }  
  117.    
  118.     public String getUserInfo() {  
  119.         return userInfo;  
  120.     }  
  121.    
  122. }  

 

最后,让我们写一个应用类,测试以上代码是否正确

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. import com.yao.http.HttpRequester;  
  2. import com.yao.http.HttpRespons;  
  3.    
  4. public class Test {  
  5.     public static void main(String[] args) {  
  6.         try {  
  7.             HttpRequester request = new HttpRequester();  
  8.             HttpRespons hr = request.sendGet("http://www.csdn.net");  
  9.    
  10.             System.out.println(hr.getUrlString());  
  11.             System.out.println(hr.getProtocol());  
  12.             System.out.println(hr.getHost());  
  13.             System.out.println(hr.getPort());  
  14.             System.out.println(hr.getContentEncoding());  
  15.             System.out.println(hr.getMethod());  
  16.               
  17.             System.out.println(hr.getContent());  
  18.    
  19.         } catch (Exception e) {  
  20.             e.printStackTrace();  
  21.         }  
  22.     }  
  23. }

这篇关于JAVA发送HTTP请求经典收藏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/985854

相关文章

springboot健康检查监控全过程

《springboot健康检查监控全过程》文章介绍了SpringBoot如何使用Actuator和Micrometer进行健康检查和监控,通过配置和自定义健康指示器,开发者可以实时监控应用组件的状态,... 目录1. 引言重要性2. 配置Spring Boot ActuatorSpring Boot Act

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

java如何分布式锁实现和选型

《java如何分布式锁实现和选型》文章介绍了分布式锁的重要性以及在分布式系统中常见的问题和需求,它详细阐述了如何使用分布式锁来确保数据的一致性和系统的高可用性,文章还提供了基于数据库、Redis和Zo... 目录引言:分布式锁的重要性与分布式系统中的常见问题和需求分布式锁的重要性分布式系统中常见的问题和需求

SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

《SpringBoot基于MyBatis-Plus实现LambdaQuery查询的示例代码》MyBatis-Plus是MyBatis的增强工具,简化了数据库操作,并提高了开发效率,它提供了多种查询方... 目录引言基础环境配置依赖配置(Maven)application.yml 配置表结构设计demo_st

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

SpringCloud集成AlloyDB的示例代码

《SpringCloud集成AlloyDB的示例代码》AlloyDB是GoogleCloud提供的一种高度可扩展、强性能的关系型数据库服务,它兼容PostgreSQL,并提供了更快的查询性能... 目录1.AlloyDBjavascript是什么?AlloyDB 的工作原理2.搭建测试环境3.代码工程1.

Java调用Python代码的几种方法小结

《Java调用Python代码的几种方法小结》Python语言有丰富的系统管理、数据处理、统计类软件包,因此从java应用中调用Python代码的需求很常见、实用,本文介绍几种方法从java调用Pyt... 目录引言Java core使用ProcessBuilder使用Java脚本引擎总结引言python