首页 > 代码库 > Java中发送http的get、post请求
Java中发送http的get、post请求
近期做项目中,须要把消息通过中间件的形式通过http请求的方式推送给第三方,因此用到了http协议,小编花费了一个多小时。对于http协议中的post和get请求,封装了一个工具类。以下与大家分享一下。
有不好的地方请多多不吝赐教。
/**
* @FileName: HttpTest.java
* @Package:com.io
* @Description: TODO
* @author: LUCKY
* @date:2016年1月6日 下午3:49:28
* @version V1.0
*/
package com.io;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.KeyManager;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import com.alibaba.common.lang.StringUtil;
/**
* @ClassName: HttpTest
* @Description: 自己開始封装的HTTP连接工具,http连接传递的參数封装到一个对象里面,
* http中get请求时,是把參数拼接到url后面的,而post请求直接输出就可以
* @author: LUCKY
* @date:2016年1月6日 下午3:49:28
*/
public class HttpTest {
private static final String METHOD_POST = "POST";
private static final String METHOD_GET = "GET";
private static final String DEFAULT_CHARSET = "UTF-8";
private static final String HTTPS = "https";
private static final String TLS = "tls";
private static final String CTYPE = "application/x-www-form-urlencoded;charset="
+ DEFAULT_CHARSET;
public static void main(String[] args) throws Exception {
Map<String, String> param = new HashMap<String, String>();
param.put("body", String.valueOf(System.currentTimeMillis()));
param.put("tag", "撒点粉");
String string = doGet(
" http://localhost/receive.do", param,
3000, 3000);
String aa = doPost(
" http://localhost/receive.do", param,
3000, 3000);
System.out.println(string.length());
System.out.println(string);
}
/**
* @throws Exception
* @Title: doPost
* @Description: doPost发送请求操作
* @param @param url
* @param @param params
* @param @param readTimeOut
* @param @param connectTimeOut
* @param @return
* @return String
* @throws
*/
public static String doPost(String url, Map<String, String> params,
int readTimeOut, int connectTimeOut) throws Exception {
HttpURLConnection connection = null;
OutputStream out = null;
String result = null;
try {
connection = getConnection(new URL(url), readTimeOut,
connectTimeOut, METHOD_POST, CTYPE, null);
byte[] content = new byte[0];
String param = getUrl(params, DEFAULT_CHARSET);
if (StringUtil.isNotEmpty(param)) {
content = param.getBytes(DEFAULT_CHARSET);
}
out = connection.getOutputStream();
// post传送消息内容
out.write(content);
// 接受的返回值通过buffer来接受
result = responseAsString(connection);
} catch (IOException e) {
e.printStackTrace();
throw e;
} finally {
if (connection != null) {
connection.disconnect();
}
}
return result;
}
/**
* @Title: doGet
* @Description: doGet发送消息请求
* @param @param url
* @param @param params
* @param @param readTimeOut
* @param @param connectTimeOut
* @param @return
* @return String
* @throws
*/
public static String doGet(String url, Map<String, String> params,
int readTimeOut, int connectTimeOut) {
HttpURLConnection connection = null;
String result=null;
try {
String query = getUrl(params, DEFAULT_CHARSET);
connection = getConnection(new URL(buildUrl(url, query)),
readTimeOut, connectTimeOut, METHOD_GET, CTYPE, null);
result=responseAsString(connection);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (connection != null) {
connection.disconnect();
}
}
return result;
}
// 把doGet和doPost请求最后的接受參数再次的抽取出来
private static String responseAsString(HttpURLConnection connection) {
StringBuffer buffer = new StringBuffer();
InputStreamReader reader = null;
OutputStream out = null;
try {
// 假设返回成功
if (HttpURLConnection.HTTP_OK == connection.getResponseCode()) {
reader = new InputStreamReader(connection.getInputStream());
char[] ch = new char[1024];
int x = 0;
while ((x = reader.read(ch)) != -1) {
buffer.append(ch, 0, x);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (connection != null) {
connection.disconnect();
}
}
return buffer.toString();
}
// 须要再写一个getConnection的方法,把doPost和doGet的connection都抽取出来
private static HttpURLConnection getConnection(URL url, int readTimeOut,
int connectTimeOut, String method, String ctype,
Map<String, String> headMap) throws Exception {
HttpURLConnection connection = null;
if (url == null) {
return null;
}
if (HTTPS.equals(url.getProtocol())) {
SSLContext ctx = null;
try {
ctx = SSLContext.getInstance(TLS);
ctx.init(new KeyManager[0],
new TrustManager[] { new DefaultTrustManager() },
new SecureRandom());
} catch (Exception e) {
throw new IOException(e);
}
HttpsURLConnection connHttps = (HttpsURLConnection) url
.openConnection();
connHttps.setSSLSocketFactory(ctx.getSocketFactory());
connHttps.setHostnameVerifier(new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
connection = connHttps;
} else {
connection = (HttpURLConnection) url.openConnection();
}
connection.setReadTimeout(readTimeOut);
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setRequestMethod(method);
connection.setConnectTimeout(connectTimeOut);
connection.setRequestProperty("Accept",
"text/xml,text/javascript,text/html");
connection.setRequestProperty("User-Agent", "top-sdk-java");
connection.setRequestProperty("Content-Type", ctype);
// 遍历设置headMap
if (null != headMap) {
Set<Entry<String, String>> entries = headMap.entrySet();
for (Map.Entry<String, String> entry : entries) {
connection.setRequestProperty(entry.getKey(), entry.getValue());
}
}
return connection;
}
/**
* @Title: getUrl
* @Description: doGet发送请求时拼接的URL
* @param @param params
* @param @param charset
* @param @return
* @param @throws UnsupportedEncodingException
* @return String
* @throws
*/
public static String getUrl(Map<String, String> params, String charset)
throws UnsupportedEncodingException {
StringBuffer buffer = new StringBuffer("?");
if (params == null && params.isEmpty()) {
return null;
}
// 否则的话,開始拼接须要传递的值。也就是URL?AA==BB&CC==EE这种相似的连接值
Set<Entry<String, String>> entries = params.entrySet();
for (Entry<String, String> entry : entries) {
String name = entry.getKey();
String value = http://www.mamicode.com/entry.getValue();>" + query;
}
return url;
}
private static class DefaultTrustManager implements X509TrustManager {
public X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
}
public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
}
}
}
很多其它有关http协议的内容,请參考:Http协议具体解释
Http协议中的Content-Type
Java中发送http的get、post请求
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。