HttpURLConnection发送GET、POST请求
HttpURLConnection发送GET、POST请求
/**
* GET请求
*
* @param requestUrl 请求地址
* @return
*/
public String get(String requestUrl) {
HttpURLConnection connection = null;
InputStream is = null;
BufferedReader br = null;
String result = null;
try {
/** 创建远程url连接对象 */
URL url = new URL(requestUrl);
/** 通过远程url对象打开一个连接,强制转换为HttpUrlConnection类型 */
connection = (HttpURLConnection) url.openConnection();
/** 设置连接方式:GET */
connection.setRequestMethod("GET");
/** 设置连接主机服务器超时时间:15000毫秒 */
connection.setConnectTimeout(15000);
/** 设置读取远程返回的数据时间:60000毫秒 */
connection.setReadTimeout(60000);
/** 设置通用的请求属性 */
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 设置传入参数的格式:请求参数应该是 name1=value1&name2=value2 的形式
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
/** 发送GET方式请求,使用connet方法建立和远程资源之间的实际连接即可 */
connection.connect();
/*-------------------------->*/
/** 获取所有相应头字段 */
Map<String, List<String>> map = connection.getHeaderFields();
/** 遍历响应头字段 */
for (String key : map.keySet()) {
System.out.println(key + "---------->" + map.get(key));
}
/* <-------------------------- */
/** 请求成功:返回码为200 */
if (connection.getResponseCode() == 200) {
/** 通过connection连接,获取输入流 */
is = connection.getInputStream();
/** 封装输入流is,并指定字符集 */
br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
/** 存放数据 */
StringBuffer sbf = new StringBuffer();
String line = null;
while ((line = br.readLine()) != null) {
sbf.append(line);
sbf.append("\r\n");
}
result = sbf.toString();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
/** 关闭资源 */
try {
if (null != br) {
br.close();
}
if (null != is) {
is.close();
}
} catch (Exception e) {
e.printStackTrace();
}
/** 关闭远程连接 */
// 断开连接,最好写上,disconnect是在底层tcp socket链接空闲时才切断。如果正在被其他线程使用就不切断。
// 固定多线程的话,如果不disconnect,链接会增多,直到收发不出信息。写上disconnect后正常一些
connection.disconnect();
System.out.println("--------->>> GET request end <<<----------");
}
return result;
}
/**
* POST请求
*
* @param requestUrl 请求地址
* @param param 请求数据
* @return
*/
public String post(String requestUrl, String param) {
HttpURLConnection connection = null;
InputStream is = null;
OutputStream os = null;
BufferedReader br = null;
String result = null;
try {
/** 创建远程url连接对象 */
URL url = new URL(requestUrl);
/** 通过远程url对象打开一个连接,强制转换为HttpUrlConnection类型 */
connection = (HttpURLConnection) url.openConnection();
/** 设置连接方式:POST */
connection.setRequestMethod("POST");
/** 设置连接主机服务器超时时间:15000毫秒 */
connection.setConnectTimeout(15000);
/** 设置读取远程返回的数据时间:60000毫秒 */
connection.setReadTimeout(60000);
/** 设置是否向httpUrlConnection输出,设置是否从httpUrlConnection读入,此外发送post请求必须设置这两个 */
// 默认值为:false,当向远程服务器传送数据/写数据时,需要设置为true
connection.setDoOutput(true);
// 默认值为:true,当前向远程服务读取数据时,设置为true,该参数可有可无
connection.setDoInput(true);
/** 设置通用的请求属性 */
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 设置传入参数的格式:请求参数应该是 name1=value1&name2=value2 的形式
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
/** 通过连接对象获取一个输出流 */
os = connection.getOutputStream();
/** 通过输出流对象将参数写出去/传输出去,它是通过字节数组写出的 */
// 若使用os.print(param);则需要释放缓存:os.flush();即使用字符流输出需要释放缓存,字节流则不需要
if(param != null && param.length() > 0) {
os.write(param.getBytes());
}
/** 请求成功:返回码为200 */
if (connection.getResponseCode() == 200) {
/** 通过连接对象获取一个输入流,向远程读取 */
is = connection.getInputStream();
/** 封装输入流is,并指定字符集 */
br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
/** 存放数据 */
StringBuffer sbf = new StringBuffer();
String line = null;
while ((line = br.readLine()) != null) {
sbf.append(line);
sbf.append("\r\n");
}
result = sbf.toString();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
/** 关闭资源 */
try {
if (null != br) {
br.close();
}
if (null != is) {
is.close();
}
if (null != os) {
os.close();
}
} catch (Exception e) {
e.printStackTrace();
}
/** 关闭远程连接 */
// 断开连接,最好写上,disconnect是在底层tcp socket链接空闲时才切断。如果正在被其他线程使用就不切断。
// 固定多线程的话,如果不disconnect,链接会增多,直到收发不出信息。写上disconnect后正常一些
connection.disconnect();
System.out.println("--------->>> POST request end <<<----------");
}
return result;
}
参考:https://blog.csdn.net/u012513972/article/details/79569888
HttpURLConnection发送GET、POST请求的更多相关文章
- HttpUrlConnection发送url请求(后台springmvc)
1.HttpURLConnection发送url请求 public class JavaRequest { private static final String BASE_URL = "h ...
- HttpURLConnection发送POST请求(可包含文件)
import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.File; import java.io. ...
- Http学习之使用HttpURLConnection发送post和get请求(3)
使用HttpURLConnection发送post和get请求 但我们常常会碰到这样一种情况: 通过HttpURLConnection来模拟模拟用户登录Web服务器,服务器使用cookie进行用户认证 ...
- Http学习之使用HttpURLConnection发送post和get请求(2)
接上节Http学习之使用HttpURLConnection发送post和get请求 本节深入学习post请求. 上 节说道,post请求的OutputStream实际上不是网络流,而是写入内存,在ge ...
- HttpURLConnection发送请求
每个 HttpURLConnection 实例都可用于生成单个请求,但是其他实例可以透明地共享连接到 HTTP 服务器的基础网络.请求后在 HttpURLConnection 的 InputStrea ...
- 【JAVA】通过URLConnection/HttpURLConnection发送HTTP请求的方法(一)
Java原生的API可用于发送HTTP请求 即java.net.URL.java.net.URLConnection,JDK自带的类: 1.通过统一资源定位器(java.net.URL)获取连接器(j ...
- HttpURLConnection 发送http请求帮助类
java 利用HttpURLConnection 发送http请求 提供GET / POST /上传文件/下载文件 功能 import java.io.*; import java.net.*; im ...
- 谈谈Java利用原始HttpURLConnection发送POST数据
这篇文章主要给大家介绍java利用原始httpUrlConnection发送post数据,设计到httpUrlConnection类的相关知识,感兴趣的朋友跟着小编一起学习吧 URLConnectio ...
- JAVA使用原始HttpURLConnection发送POST数据
package com.newflypig.demo; /** * 使用jdk自带的HttpURLConnection向URL发送POST请求并输出响应结果 * 参数使用流传递,并且硬编码为字符串&q ...
随机推荐
- promise、resolve、reject、拦截响应
Promise是一个接口,它用来处理的对象具有这样的特点:在未来某一时刻(主要是异步调用)会从服务端返回或者被填充属性.其核心是,promise是一个带有then()函数的对象. 使用promise机 ...
- centos环境下创建数据库和表的方法
centos环境下创建数据库和表的方法 //查询数据库的命令: mysql> SHOW DATABASES; +--------------------+ | Database ...
- [leetcode] 10. Symmetric Tree
这次我觉得我的智商太低,想了很久才写出来.题目是让求镜像二叉树判断,题目如下: Given a binary tree, check whether it is a mirror of itself ...
- 学习python的第五天
4.30自我总结 一复习 1.查看数据类型 #数值10的位置 print(di(10)) #数值10的样式 print(type(10)) 2.关于变量的一些补充 a=1 b=1 c=1 #a,b,c ...
- 原创:MVC 5 实例教程(MvcMovieStore 新概念版:mvc5.0,EF6.01) - 2、数据框架 和 功能预览
说明:MvcMovieStore项目已经发布上线,想了解最新版本功能请登录 MVC 影视(MvcMovie.cn) 进行查阅.如需转载,请注明出处:http://www.cnblogs.com/Dod ...
- 使用Arduino Wire Library读取温湿度传感器AM2321
AM2321是采用I2C总线或单总线通讯的国产温湿度传感器.在AM2321手册中,当采用I2C通讯时,手册指定了多处需要主机等待的时间间隔,包括: (1)唤醒传感器时,从机不回复ACK,但主机主要等待 ...
- Python2 to python3
概述 几乎所有的Python 2程序都需要一些修改才能正常地运行在Python 3的环境下.为了简化这个转换过程,Python 3自带了一个叫做2to3的实用脚本(Utility Script),这个 ...
- 针对SQLServer数据库的通用访问类
Web.config中代码 <configuration> <connectionStrings> <add name="connString" co ...
- Lambda 表达式浅谈- 01
已经有一段时间没有发布博文了... 今天就写一写lambda的一些简单的使用方法 Lambda 在Msdn 上的描述: Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数. 通过使用 ...
- EF一对多的表,模糊查询2个表的数据!
如用户表和电话表,要求搜索时可以模糊查询姓名和号码.都可以找到包含该字符的所有用户. /// <summary> /// 模糊查询姓名和电话号码,并按姓名排序返回 /// </sum ...