java常用的发送http请求的工具方法
java常用的HttpURLConnection 方式发送http请求的工具方法
需要的jar包有jsp-api.jar 、servlet-api.jar 、dom4j.jar
package cn.geobeans.fwzx.util;import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Iterator;
import java.util.Map;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.io.SAXReader;/***@author Leo *@parameter E-mail:15895982509@163.com*@version 创建时间:2016-4-21上午10:30:50*/
public class HttpUtil {private static Logger logger = Logger.getLogger(HttpUtil.class);/*** 获取request请求的ip地址* @param request 请求为HttpServletRequest类型* @return String 类型的ip地址* * */public static String getRemoteHost(HttpServletRequest request){String ip = request.getHeader("x-forwarded-for");if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){ip = request.getHeader("Proxy-Client-IP");}if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){ip = request.getHeader("WL-Proxy-Client-IP");}if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){ip = request.getRemoteAddr();}return ip.equals("0:0:0:0:0:0:0:1")?"127.0.0.1":ip;}/*** 通过本地路径获取Document对象* @param url String类型本地地址* @return Document类型的数据对象* */public static Document getDocByCLWFSearch(String url) throws DocumentException{SAXReader reader = new SAXReader();Document doc = reader.read(url);return doc;}/*** 通过远程路径发送http请求来获取Document对象* @param url String类型的远程地址* @return Document类型的数据对象* */public static Document getDocByCLWFRoadSearch(String url) throws DocumentException, IOException{URL u = new URL(url);HttpURLConnection conn = (HttpURLConnection) u.openConnection();conn.setRequestProperty("accept", "text/xml");SAXReader reader = new SAXReader();Document doc = reader.read(conn.getInputStream());return doc;}/*** 通过get方法来发送http请求来获取String类型数据,并且对请求的数据进行编码* @param url String类型的远程请求地址* @param encoding String类型的数据编码方式* @return String类型字符串* */public static String getHTMLByGet(String url,String encoding) throws IOException{URL u = new URL(url);HttpURLConnection conn = (HttpURLConnection) u.openConnection();conn.setDoOutput(true);StringBuffer data = new StringBuffer();BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream(),encoding));String line;while ((line = rd.readLine()) != null) {data.append(line);}rd.close();return data.toString();}/*** 通过get方法来发送http请求来获取Document对象* @param url String类型远程请求的地址* @return Document类型对象* */public static Document getDocByGet(String url) throws DocumentException,IOException{URL u=new URL(url);SAXReader reader = new SAXReader();return reader.read(u.openStream());}/*** 通过post方法来发送http请求来获取Document对象* @param url String类型远程请求地址* @param params Map<String, String>类型的请求参数* @return Document类型对象* */public static Document getDocByPost(String url, Map<String, String> params) throws DocumentException,IOException {URL u = new URL(url);HttpURLConnection conn = (HttpURLConnection) u.openConnection();conn.setRequestMethod("POST");conn.setDoOutput(true);StringBuffer paramStr = new StringBuffer();String sep = "";for (Iterator<String> param = params.keySet().iterator(); param.hasNext();) {String key = param.next();String val = URLEncoder.encode(params.get(key),"UTF-8");if(key.equals("xml") || key.equals("XML")){val= val.replaceAll("\\+", "%20").replaceAll("\\%21", "!").replaceAll("\\%27", "'").replaceAll("\\%28", "(").replaceAll("\\%29", ")").replaceAll("\\%7E", "~");}paramStr.append(sep).append(key).append("=").append(val);sep = "&";}PrintWriter out = new PrintWriter(conn.getOutputStream());out.print(paramStr.toString());out.close();SAXReader reader = new SAXReader(); return reader.read(conn.getInputStream());}/*** 通过get方法来发送http请求来获取Document对象,请求数据无编码* @param url String类型远程请求地址* @param params Map<String, String>类型的请求参数* @return Document类型对象* */public static Document getDocByPostNoEncoding(String url, Map<String, String> params) throws DocumentException,IOException {URL u = new URL(url);HttpURLConnection conn = (HttpURLConnection) u.openConnection();conn.setRequestMethod("POST");conn.setDoOutput(true);StringBuffer paramStr = new StringBuffer();String sep = "";for (Iterator<String> param = params.keySet().iterator(); param.hasNext();) {String key = param.next();String val = params.get(key);paramStr.append(sep).append(key).append("=").append(val);sep = "&";}PrintWriter out = new PrintWriter(conn.getOutputStream());out.print(paramStr.toString());out.close();SAXReader reader = new SAXReader(); return reader.read(conn.getInputStream());}/*** 通过post方法来发送http请求来获取Document对象,请求数据UTF-8编码* @param url String类型远程请求地址* @param params Map<String, String>类型的请求参数* @return Document类型对象* */public static Document getDocByPostUTF8(String url, Map<String, String> params) throws DocumentException,IOException {StringBuffer paramStr = new StringBuffer();String sep = "";for (Iterator<String> param = params.keySet().iterator(); param.hasNext();) {String key = param.next();String val = params.get(key);paramStr.append(sep).append(key).append("=").append(val);sep = "&";}URL u = new URL(url+"?"+paramStr.toString());HttpURLConnection conn = (HttpURLConnection) u.openConnection();conn.setRequestMethod("POST");conn.setDoOutput(true);StringBuffer data = new StringBuffer();BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8"));String line;while ((line = rd.readLine()) != null) {data.append(line);}rd.close();Document dods = DocumentHelper.parseText(data.toString());return dods;}/*** 通过post方法来发送http请求来获取Document对象,请求数据进行编码* @param url String类型远程请求地址* @param encode String类型对请求数据进行编码* @return Document类型对象* */public static Document getDocByPost(String url,String encode) throws DocumentException,IOException {URL u = new URL(url);HttpURLConnection conn = (HttpURLConnection) u.openConnection();conn.setRequestMethod("POST");conn.setDoOutput(true);StringBuffer data = new StringBuffer();BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream(),encode));String line;while ((line = rd.readLine()) != null) {data.append(line);}rd.close();Document dods = DocumentHelper.parseText(data.toString());return dods;}/*** 通过get方法来发送http请求来获取Document对象,请求数据进行编码* @param url String类型远程请求地址* @param encode String类型对请求数据进行编码* @return Document类型对象* */public static String getStringByGet(String url,String encode) throws DocumentException,IOException {URL u = new URL(url);HttpURLConnection conn = (HttpURLConnection) u.openConnection();conn.setRequestMethod("GET");conn.setDoOutput(true);StringBuffer data = new StringBuffer();BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream(),encode));String line;while ((line = rd.readLine()) != null) {data.append(line);}rd.close();return data.toString();}/*** 通过post方法来发送http请求来获取json字符串对象* @param url String类型远程请求地址* @param params String类型的请求参数* @return Json字符串类型* */public static String getJsonDocByPost(String url, Map<String, String> params) throws IOException {URL u = new URL(url);HttpURLConnection conn = (HttpURLConnection) u.openConnection();conn.setRequestMethod("POST");conn.setDoOutput(true);StringBuffer paramStr = new StringBuffer();String sep = "";for (Iterator<String> param = params.keySet().iterator(); param.hasNext();) {String key = URLEncoder.encode(param.next(),"UTF-8");String val = params.get(key);paramStr.append(sep).append(key).append("=").append(val);sep = "&";}PrintWriter out = new PrintWriter(conn.getOutputStream());out.print(paramStr.toString());out.close();StringBuffer data = new StringBuffer();BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8"));String line;while ((line = rd.readLine()) != null) {data.append(line);}rd.close();return data.toString();}/*** 通过post方法来发送http请求来获取json字符串对象,并且进行GBK编码* @param url String类型远程请求地址* @param params String类型的请求参数* @return Json字符串类型* */public static String getJsonDocByPostGBK(String url, Map<String, String> params) throws IOException {URL u = new URL(url);HttpURLConnection conn = (HttpURLConnection) u.openConnection();conn.setRequestMethod("POST");conn.setDoOutput(true);StringBuffer paramStr = new StringBuffer();String sep = "";for (Iterator<String> param = params.keySet().iterator(); param.hasNext();) {String key = param.next();String val = URLEncoder.encode(params.get(key),"GBK");if(key.equals("xml") || key.equals("XML")){val= val.replaceAll("\\+", "%20").replaceAll("\\%21", "!").replaceAll("\\%27", "'").replaceAll("\\%28", "(").replaceAll("\\%29", ")").replaceAll("\\%7E", "~");}paramStr.append(sep).append(key).append("=").append(val);sep = "&";}PrintWriter out = new PrintWriter(conn.getOutputStream());out.print(paramStr.toString());out.close();StringBuffer data = new StringBuffer();BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream(),"GBK"));String line;while ((line = rd.readLine()) != null) {data.append(line);}rd.close();return data.toString();}/*** 获取端口的状态* @param ip String类型的ip地址* @param port String类型的端口号* @param timeout int类型的连接时间* @return boolean类型true代表端口通的,false代表端口不通* */public static boolean isReachable(String ip, String port, int timeout) {boolean reachable = false;// 如果端口为空,使用 isReachable 检测,非空使用 socket 检测if(port == null) {try {InetAddress address = InetAddress.getByName(ip);reachable = address.isReachable(timeout);} catch (Exception e) {logger.error(e.getMessage());reachable = false;}} else {Socket socket = new Socket();try {socket.connect(new InetSocketAddress(ip, Integer.parseInt(port)), timeout);reachable = true;} catch (Exception e) {logger.error(e);reachable = false;} finally {try {if(socket != null) socket.close();}catch (Exception e) {}}}return reachable;}/*** 获取服务的连接状态信息* @param url String类型的一个页面地址* @param timeout int类型的连接时间* @return boolean类型true代表端口通的,false代表端口不通* */public static boolean isReacheable(String url, int timeout){try { HttpURLConnection con=(HttpURLConnection) new URL(url).openConnection(); con.setRequestMethod("HEAD"); con.setConnectTimeout(timeout);if(con.getResponseCode() == 200){return true;}}catch (Exception e) { logger.error(e);}return false; }/*** 通过post方法发送http请求,并且请求结果采用UTF-8编码* @param url String类型远程请求地址* @param params String类型的请求参数* @return Json类型的字符串* */public static String getJsonDocByPostUTF8(String url, String params) throws IOException {URL u = new URL(url);HttpURLConnection conn = (HttpURLConnection) u.openConnection();conn.setRequestMethod("POST");conn.setDoOutput(true);PrintWriter out = new PrintWriter(conn.getOutputStream());out.print(params);out.close();StringBuffer data = new StringBuffer();BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8"));String line;while ((line = rd.readLine()) != null) {data.append(line);}rd.close();return data.toString();}}
以上是自己用到的一些java中发送get和post请求的工具方法,希望大家多批评指正,互相学习
java常用的发送http请求的工具方法相关推荐
- JavaSocket编写发送TCP请求的工具类
转自:https://blog.csdn.net/jadyer/article/details/8788303 package com.jadyer.util;import java.io.ByteA ...
- 分享一个发送http请求的工具类
分享一个发送http请求的工具类 maven依赖只需要导入一个 <dependencies><dependency><groupId>commons-httpcli ...
- JAVA通过HTTPS发送POST请求的方法
因为调用一个外部接口,会用到POST请求,而且还是Https的,但是由于之前学习的时候没有用到,所以研究了很久才弄懂了怎么去用JAVA实现Https发送post请求 使用的是HttpsURLConne ...
- java 常用四舍五入保留小数点后两位方法
java 常用四舍五入保留小数点后两位方法 1 . Math.round double num = Math.round(5.2544555 * 100) * 0.01; System.out.pri ...
- 通过java.net.URLConnection发送HTTP请求
为什么80%的码农都做不了架构师?>>> 最常用的Http请求无非是get和post,get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给服务器,post与get ...
- java使用Jodd-http发送http请求
之前写过一篇关于java代码中使用restTemplate发送http请求的文章,那种方式比较复杂一点,现在使用jodd工具包来实现,相对来说简单多 首先在代码中引入jodd-http的依赖 < ...
- 发送http请求的工具类
大家工作中都会遇到使用http请求调用合作商接口的需求,下面分享一个封装好的http请求工具类 1.发送GET请求 /***发送GET方法的请求*/public static String sendG ...
- 超好用的后端发送http请求HttpUtils工具类(基于原生http连接,不需要另外导包)
在项目中,为了实现一些特定的功能,我们常常需要发送http异步请求 ,为此需要特意封装一个实用的HttpUtils工具类 HttpUtils工具类内容如下: package com.zyw.secki ...
- java post xmll_HttpClient发送Post请求,内容格式为xml,并获取响应内容
ChannelDistributor.xml 内容如下: yisou abcd1234 10010000 00 1).HttpClient发送Post请求,内容格式为xml,并获取响应内容 impor ...
最新文章
- windows优化大师8周年纪念版_《数码宝贝》20周年纪念:当年的八神太一与亚古兽你还记得吗?...
- 一台服务器两个mysql_在一台服务器上安装两个或多个mysql的实现步骤_MySQL
- 【 Verilog HDL 】正确的变量访问思路
- SpringBoot05 数据操作01 - JPA的基本使用、基本使用02
- BZOJ 1433 Luogu P2055 [ZJOI2009]假期的宿舍 匈牙利算法
- MyEclipse部署Tomcat服务器
- django组件 分页器
- EF Code First 简单的示例
- wordpress 评论ajax,WordPress教程 WordPress实现提交评论ajax翻页效果教程
- ZCTF2015 pwn试题分析
- 史上最强GAN:训练费10万起,现在免费体验,画风鬼畜又逼真
- Unity3D之Json序列化
- python使用 difflib 对比 两个文档 差异
- Cisco Vpn的安装过程
- 【云原生】什么是 CI/CD ?| 软件交付中常见的问题
- 前端~css~基准线与行高、行距和半行距/圆角矩形~
- 牛客SQL练习-39-针对salaries表emp_no字段创建索引idx_emp_no,查询emp_no为10005, 使用强制索引
- 使用组策略将用户文件夹重定向到D盘
- Collection 接口
- 对对碰c语言程序设计,C语言对对碰游戏源码分享
热门文章
- 那些财务眼中的SAP
- SAP,IBM,AC实施之比较
- 融合BI+AI,新一代增强型数据分析让制造企业高效解决故障预测分析问题
- 瞄准千亿个护市场,纸业龙头们下半场战役已经打响
- 美妆AI要抢李佳琦的饭碗?
- uniapp 自定义进度条_如何解决uniapp小程序下载进度条问题
- 压缩base 64字符串_ftp下载多个文件,ftp下载多个文件打包成一个压缩包
- pythonsuper_python中的super()是什么意思呢
- 攻防世界-Misc-something_in_image(秒懂!!)
- 百分之九十的人不知道?在Python中f-string的几个技巧