java常用的HttpURLConnection 方式發(fā)送http請(qǐng)求的工具方法
需要的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 創(chuàng)建時(shí)間:2016-4-21上午10:30:50*/
public class HttpUtil {private static Logger logger = Logger.getLogger(HttpUtil.class);
/*** 獲取request請(qǐng)求的ip地址* @param request 請(qǐng)求為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;}
/*** 通過(guò)本地路徑獲取Document對(duì)象* @param url String類型本地地址* @return Document類型的數(shù)據(jù)對(duì)象* */public static Document
getDocByCLWFSearch(String url)
throws DocumentException{SAXReader reader =
new SAXReader();Document doc = reader.read(url);
return doc;}
/*** 通過(guò)遠(yuǎn)程路徑發(fā)送http請(qǐng)求來(lái)獲取Document對(duì)象* @param url String類型的遠(yuǎn)程地址* @return Document類型的數(shù)據(jù)對(duì)象* */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;}
/*** 通過(guò)get方法來(lái)發(fā)送http請(qǐng)求來(lái)獲取String類型數(shù)據(jù),并且對(duì)請(qǐng)求的數(shù)據(jù)進(jìn)行編碼* @param url String類型的遠(yuǎn)程請(qǐng)求地址* @param encoding String類型的數(shù)據(jù)編碼方式* @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();}
/*** 通過(guò)get方法來(lái)發(fā)送http請(qǐng)求來(lái)獲取Document對(duì)象* @param url String類型遠(yuǎn)程請(qǐng)求的地址* @return Document類型對(duì)象* */public static Document
getDocByGet(String url)
throws DocumentException,IOException{URL u=
new URL(url);SAXReader reader =
new SAXReader();
return reader.read(u.openStream());}
/*** 通過(guò)post方法來(lái)發(fā)送http請(qǐng)求來(lái)獲取Document對(duì)象* @param url String類型遠(yuǎn)程請(qǐng)求地址* @param params Map<String, String>類型的請(qǐng)求參數(shù)* @return Document類型對(duì)象* */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());}
/*** 通過(guò)get方法來(lái)發(fā)送http請(qǐng)求來(lái)獲取Document對(duì)象,請(qǐng)求數(shù)據(jù)無(wú)編碼* @param url String類型遠(yuǎn)程請(qǐng)求地址* @param params Map<String, String>類型的請(qǐng)求參數(shù)* @return Document類型對(duì)象* */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());}
/*** 通過(guò)post方法來(lái)發(fā)送http請(qǐng)求來(lái)獲取Document對(duì)象,請(qǐng)求數(shù)據(jù)UTF-8編碼* @param url String類型遠(yuǎn)程請(qǐng)求地址* @param params Map<String, String>類型的請(qǐng)求參數(shù)* @return Document類型對(duì)象* */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;}
/*** 通過(guò)post方法來(lái)發(fā)送http請(qǐng)求來(lái)獲取Document對(duì)象,請(qǐng)求數(shù)據(jù)進(jìn)行編碼* @param url String類型遠(yuǎn)程請(qǐng)求地址* @param encode String類型對(duì)請(qǐng)求數(shù)據(jù)進(jìn)行編碼* @return Document類型對(duì)象* */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;}
/*** 通過(guò)get方法來(lái)發(fā)送http請(qǐng)求來(lái)獲取Document對(duì)象,請(qǐng)求數(shù)據(jù)進(jìn)行編碼* @param url String類型遠(yuǎn)程請(qǐng)求地址* @param encode String類型對(duì)請(qǐng)求數(shù)據(jù)進(jìn)行編碼* @return Document類型對(duì)象* */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();}
/*** 通過(guò)post方法來(lái)發(fā)送http請(qǐng)求來(lái)獲取json字符串對(duì)象* @param url String類型遠(yuǎn)程請(qǐng)求地址* @param params String類型的請(qǐng)求參數(shù)* @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();}
/*** 通過(guò)post方法來(lái)發(fā)送http請(qǐng)求來(lái)獲取json字符串對(duì)象,并且進(jìn)行GBK編碼* @param url String類型遠(yuǎn)程請(qǐng)求地址* @param params String類型的請(qǐng)求參數(shù)* @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();}
/*** 獲取端口的狀態(tài)* @param ip String類型的ip地址* @param port String類型的端口號(hào)* @param timeout int類型的連接時(shí)間* @return boolean類型true代表端口通的,false代表端口不通* */public static boolean isReachable(String ip, String port,
int timeout) {
boolean reachable =
false;
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;}
/*** 獲取服務(wù)的連接狀態(tài)信息* @param url String類型的一個(gè)頁(yè)面地址* @param timeout int類型的連接時(shí)間* @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; }
/*** 通過(guò)post方法發(fā)送http請(qǐng)求,并且請(qǐng)求結(jié)果采用UTF-8編碼* @param url String類型遠(yuǎn)程請(qǐng)求地址* @param params String類型的請(qǐng)求參數(shù)* @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中發(fā)送get和post請(qǐng)求的工具方法,希望大家多批評(píng)指正,互相學(xué)習(xí)
總結(jié)
以上是生活随笔為你收集整理的java常用的发送http请求的工具方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。