封装HttpUrlConnection开箱即用
因为经常用到 便写出来方边使用 直接复制本类即可
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map;
/**
* 封装HttpURLConnection开箱即用
* Create by yster@foxmail.com 2018/9/10/010 19:17
*/
public class HttpUtil {
private HttpURLConnection connection;
private Charset charset = Charset.forName("UTF-8");
private int readTimeout = 32000;
private int connectTimeout = 10000;
private String method = "GET";
private boolean doInput = true;
private Map<String, String> headers = null;
private String data = null;
/**
* 实例化对象
*/
public static HttpUtil connect(String url) throws IOException {
return new HttpUtil((HttpURLConnection) new URL(url).openConnection());
}
/**
* 禁止new实例
*/
private HttpUtil() {
}
private HttpUtil(HttpURLConnection connection) {
this.connection = connection;
}
/**
* 设置读去超时时间/ms
*
* @param timeout
*/
public HttpUtil setReadTimeout(int timeout) {
this.readTimeout = timeout;
return this;
}
/**
* 设置链接超时时间/ms
*
* @param timeout
*/
public HttpUtil setConnectTimeout(int timeout) {
this.connectTimeout = timeout;
return this;
}
/**
* 设置请求方式
*
* @param method
*/
public HttpUtil setMethod(String method) {
this.method = method;
return this;
}
/**
* 添加Headers
*
* @param map
*/
public HttpUtil setHeaders(Map<String, String> map) {
String cookie = "Cookie";
if (map.containsKey(cookie)) {
headers = new HashMap<>();
headers.put(cookie, map.get(cookie));
}
return this;
}
/**
* 是否接受输入流
* 默认true
*
* @param is
*/
public HttpUtil setDoInput(boolean is) {
this.doInput = is;
return this;
}
/**
* 设置请求响应的编码
*/
public HttpUtil setCharset(String charset) {
this.charset = Charset.forName(charset);
return this;
}
/**
* 写入数据,接受Map<String,String>或String类型<br>
* 例如POST时的参数<br>
* demo=1&name=2
*/
public HttpUtil setData(Object object) {
if (object == null) {
return this;
} else if (object instanceof String) {
this.data = (String) object;
} else if (object instanceof Map) {
Map map = (Map) object;
StringBuilder builder = new StringBuilder();
for (Object key : map.keySet()) {
builder.append(key + "=" + map.get(key) + "&");
}
this.data = builder.toString().substring(0, builder.length() > 0 ? builder.length() - 1 : builder.length());
}
return this;
}
/**
* 发起请求
*/
public HttpUtil execute() throws IOException {
//添加请求头
if (headers != null) {
for (String key : headers.keySet()) {
connection.setRequestProperty(key, headers.get(key));
}
}
//设置读去超时时间为10秒
connection.setReadTimeout(readTimeout);
//设置链接超时为10秒
connection.setConnectTimeout(connectTimeout);
//设置请求方式,GET,POST
connection.setRequestMethod(method.toUpperCase());
//接受输入流
connection.setDoInput(doInput);
//写入参数
if (data != null && !method.equalsIgnoreCase("GET")) {
//启动输出流,当需要传递参数时需要开启
connection.setDoOutput(true);
//添加请求参数,注意:如果是GET请求,参数要写在URL中
OutputStream output = connection.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output, charset));
//写入参数 用&分割。
writer.write(data);
writer.flush();
writer.close();
}
//发起请求
connection.connect();
return this;
}
/**
* 获取HttpURLConnection
*/
public HttpURLConnection getConnection() {
return this.connection;
}
/**
* 获取响应字符串
*/
public String getBody(String... charsets) {
//设置编码
String charset = "UTF-8";
if (charsets.length > 0) {
charset = charsets[0];
}
//读取输入流
try {
InputStream inputStream = connection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, charset));
String line = bufferedReader.readLine();
StringBuilder builder = new StringBuilder();
while (line != null) {
builder.append(line);
line = bufferedReader.readLine();
}
return builder.toString();
} catch (IOException e) {
e.printStackTrace();
}
//失败返回NULL
return null;
}
public static void main(String[] args) throws IOException {
String body = HttpUtil.connect("http://www.baidu.com")
.setMethod("GET")
.setCharset("UTF-8")
.execute()
.getBody();
System.out.println(body);
}
}
封装HttpUrlConnection开箱即用的更多相关文章
- 封装HttpURLConnection
package com.pingyijinren.test; import java.io.BufferedReader; import java.io.InputStream; import jav ...
- J1001.Java原生桌面及Web开发浅谈
自从Java问世以来,在服务端开发方面取得了巨大的发展.但是在桌面/Web开发方面,一直没有得到大的发展.从最初的AWT,到Swing,再到JavaFX,Java从来没有在桌面/Web解决方案中取得重 ...
- Android:Volley源代码解析
简单实例 Volley是一个封装HttpUrlConnection和HttpClient的网络通信框架,集AsyncHttpClient和Universal-Image-Loader的长处于了一身.既 ...
- $《第一行代码:Android》读书笔记——第10章 Android网络编程
(一)WebView的用法 1.WebView也是一个普通的控件. 2.常用用法: WebView webView = (WebView)findViewById(R.id.web_view); we ...
- Volley框架源代码分析
Volley框架分析Github链接 Volley框架分析 Volley源代码解析 为了学习Volley的网络框架,我在AS中将Volley代码又一次撸了一遍,感觉这样的照抄代码也是一种挺好的学习方式 ...
- Gong服务实现平滑重启分析
平滑重启是指能让我们的程序在重启的过程不中断服务,新老进程无缝衔接,实现零停机时间(Zero-Downtime)部署: 平滑重启是建立在优雅退出的基础之上的,之前一篇文章介绍了相关实现:Golang中 ...
- Spring Cloud 系列之 Netflix Zuul 服务网关
什么是 Zuul Zuul 是从设备和网站到应用程序后端的所有请求的前门.作为边缘服务应用程序,Zuul 旨在实现动态路由,监视,弹性和安全性.Zuul 包含了对请求的路由和过滤两个最主要的功能. Z ...
- Spring Cloud 系列之 Gateway 服务网关(一)
什么是 Spring Cloud Gateway Spring Cloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代 Netflix Zuul,其不仅提供统一的路由 ...
- Vue+EasyPOI导出Excel(带图片)
一.前言 平时的工作中,Excel 导入导出功能是非常常见的功能,无论是前端 Vue (js-xlsx) 还是 后端 Java (POI),如果让大家手动编码实现的话,恐怕就很麻烦了,尤其是一些定制化 ...
随机推荐
- 本机mysql 5.7服务启动后停止,某些服务在未有其他应用程序使用时停止
本机mysql 5.7服务启动后停止,某些服务在未有其他应用程序使用时停止 出现这种报错,mysql服务启动不了: 错误的尝试: 1:尝试了这个博客:https://blog.csdn.net/wai ...
- Sql Server XML
实验数据: Create table xmldata (name NVARCHAR(20), age int, sex NVARCHAR(5) ) INSERT INTO xmldata VALUES ...
- 以太坊 ERC20 与 ERC721 深度解密
去年11月份的一段时间,Ethereum网络突然变的特别拥堵,原因是兴起了一款以太坊养猫的Dapp游戏,超级可爱的猫形象,再加上配种,繁殖和拍卖等丰富的玩法,风靡了币圈. 一时间币圈大大小小的人都在撸 ...
- win7 中 sql server2005 卸载简介
注:卸载前一定要做好备份,一定要清理干净,不然重装会出错(只针对完全卸载,没试过只删除一个版本的) 工具:①Windows Install Clean Up ②SrvInstw.exe 1.停止所有 ...
- NPOI导入导出Excel工具类
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Ref ...
- Android内嵌VLC实现播放网络视频,网络音频
1.在对应模块的build.gradle文件中,添加依赖 //VlC implementation "de.mrmaffen:vlc-android-sdk:2.0.6" 2.布局 ...
- CentOS7 Python2 和Python3 共存(Python3安装)【转】
1.查看是否已经安装Python CentOS 7.2 默认安装了python2.7.5 因为一些命令要用它比如yum 它使用的是python2.7.5. 使用 python -V 命令查看一下是否安 ...
- .net的mvc的fw版本为4.5发布到阿里云【云虚拟主机】上.
注意:云虚拟主机和云服务器(ECS)不是同一个产品,请注意分别. 云服务器ECS: 云虚拟主机: 我用的是云虚拟主机也是第二个,版本是window server 声明:默认,已经把域名[已备案]绑定 ...
- 约瑟夫环简介,问题以及java实现
问题:一群猴子排成一圈,按1,2,--.,n依次编号.然后从第一只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,再把它踢出去-------.,如此不停的进行下去,直到最后只剩下一只猴 ...
- KFCM算法的matlab程序(用FCM初始化聚类中心)
KFCM算法的matlab程序(用FCM初始化聚类中心) 在“聚类——KFCM”这篇文章中已经介绍了KFCM算法,现在用matlab程序对iris数据库进行实现,用FCM初始化聚类中心,并求其准确度与 ...