jdk-httpclient
jdk自帶發送http請求的類,不需要第三方依賴
發送get請求和post請求
發送get請求
BufferedReader in = null;
StringBuffer strBuf = new StringBuffer();
try {
URL realUrl = new URL(url);
// 打開和URL之間的連接
URLConnection conn = realUrl.openConnection();
// 定義BufferedReader輸入流來讀取URL的響應
InputStreamReader inputStreamReader = new InputStreamReader(conn.getInputStream());
in = new BufferedReader(inputStreamReader);
String line;
while ((line = in.readLine()) != null) {
strBuf.append(line);
strBuf.append("\r\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
設置請求參數
conn.setRequestProperty("content-type", "application/json");
封裝一個簡單的get方法
public StringBuffer get(String url, Map<String, String> headers) {
URLConnection conn = null;
try {
URL realUrl = new URL(url);
conn = realUrl.openConnection();
} catch (IOException e1) {
e1.printStackTrace();
}
if (headers != null) {
for (Map.Entry<String, String> e : headers.entrySet()) {
conn.setRequestProperty(e.getKey(), e.getValue());
}
}
// 定義BufferedReader輸入流來讀取URL的響應
BufferedReader in = null;
StringBuffer strBuf = new StringBuffer();
try {
InputStreamReader inputStreamReader = new InputStreamReader(conn.getInputStream());
in = new BufferedReader(inputStreamReader);
String line;
while ((line = in.readLine()) != null) {
strBuf.append(line);
strBuf.append("\r\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return strBuf;
}
使用get方法
Map<String, String> hdeader = new HashMap<>();
hdeader.put("content-type", "application/json");
StringBuffer strBuf = get(url, hdeader);
發送post請求
發送 post json
PrintWriter out = null;
BufferedReader in = null;
String result = "";
try {
URL realUrl = new URL(url);
// 打開和URL之間的連接
URLConnection conn = realUrl.openConnection();
// 設置user-agent
conn.setRequestProperty("user-agent", "Koala Admin");
// 指定文本類型爲JSON格式
conn.setRequestProperty("content-type", "application/json");
// 發送POST請求必須設置如下兩行
conn.setDoOutput(true);
conn.setDoInput(true);
// 獲取URLConnection對象對應的輸出流
out = new PrintWriter(conn.getOutputStream());
// 發送請求參數
out.print(param);
// flush輸出流的緩衝
out.flush();
// 定義BufferedReader輸入流來讀取URL的響應
InputStreamReader inputStreamReader = new InputStreamReader(conn.getInputStream());
in = new BufferedReader(inputStreamReader);
String line;
while ((line = in.readLine()) != null) {
result += line;
}
// 保存sessionId
readCookies(conn);
} catch (Exception e) {
System.out.println("發送 POST 請求出現異常!" + e);
e.printStackTrace();
}
// 使用finally塊來關閉輸出流、輸入流
finally {
try {
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
如果發送的不是json格式
// 建立輸入流,向指向的URL傳入參數 ,支持的格式是 key=value&key=value
dos = new DataOutputStream(httpConn.getOutputStream());
dos.writeBytes(urlParam.toString());
dos.flush();
封裝工具類
JdkHttpClient
package com.bill.utils.http;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.Map;
import java.util.Map.Entry;
/**
* 接口調用工具類 目前支持 GET POST請求兩種方式
*/
public class JdkHttpClient {
private static URL initUrl(String url) {
try {
return new URL(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
return null;
}
private static URL initUrl(String url, Map<String, String> params) {
StringBuffer urlParam = buildHttpQueryParams(params);
try {
return new URL(url + (urlParam.length() > 0 ? "?" + urlParam.toString() : ""));
} catch (MalformedURLException e1) {
e1.printStackTrace();
}
return null;
}
@SuppressWarnings("deprecation")
public static StringBuffer buildHttpQueryParams(Map<String, String> params) {
StringBuffer sb = new StringBuffer();
for (Entry<String, String> e : params.entrySet()) {
sb.append(e.getKey() + "=" + URLEncoder.encode(e.getValue().toString()) + "&");
}
if (sb.length() > 0) {
sb.deleteCharAt(sb.lastIndexOf("&"));
}
return sb;
}
public static HttpURLConnection initHttpUrl(String url, Map<String, String> headers, Map<String, String> params) {
URL realURL = null;
if (params != null) {
realURL = initUrl(url, params);
} else {
realURL = initUrl(url);
}
HttpURLConnection httpConnection = null;
try {
httpConnection = (HttpURLConnection) realURL.openConnection();
} catch (IOException e1) {
e1.printStackTrace();
}
if (headers != null) {
for (Map.Entry<String, String> e : headers.entrySet()) {
httpConnection.setRequestProperty(e.getKey(), e.getValue());
}
}
return httpConnection;
}
private static String getFailMessage(HttpURLConnection conn) {
try {
return "code : " + conn.getResponseCode() + " url:" + conn.getURL().toString();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public static StringBuffer getResponseString(URLConnection conn) {
// 定義BufferedReader輸入流來讀取URL的響應
BufferedReader in = null;
StringBuffer strBuf = new StringBuffer();
String line;
try {
InputStreamReader inputStreamReader = new InputStreamReader(conn.getInputStream());
in = new BufferedReader(inputStreamReader);
while ((line = in.readLine()) != null) {
strBuf.append(line);
strBuf.append("\r\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
close(in);
}
return strBuf;
}
public static void close(AutoCloseable io) {
if (io != null) {
try {
io.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* get請求
*
* @param url
* @param param
* @return
*/
public static StringBuffer get(String url, Map<String, String> headers, Map<String, String> params) {
// 初始化請求
HttpURLConnection httpConnection = initHttpUrl(url, headers, params);
// 設置請求方法
try {
httpConnection.setRequestMethod("GET");
} catch (ProtocolException e1) {
e1.printStackTrace();
}
// 讀取數據
StringBuffer sb = null;
try {
if (httpConnection.getResponseCode() != HttpURLConnection.HTTP_OK) {
String msg = getFailMessage(httpConnection);
throw new RuntimeException("HTTP GET Request Failed with Error " + msg);
} else {
sb = getResponseString(httpConnection);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
httpConnection.disconnect();
}
return sb;
}
/**
* 向指定URL發送post請求
*/
public static String post(String url, Map<String, String> headers, Map<String, String> params) {
HttpURLConnection httpConn = postStream(url, headers, params);
StringBuffer sb = null;
try {
// 讀取響應
if (httpConn.getResponseCode() == HttpURLConnection.HTTP_OK) {
sb = getResponseString(httpConn);
} else {
throw new RuntimeException("HTTP POST Request Failed with Error " + getFailMessage(httpConn));
}
} catch (IOException e) {
e.printStackTrace();
} finally {
httpConn.disconnect();// 斷開連接
}
return sb.toString();
}
/**
* 返回HttpURLConnection
* 自行從HttpURLConnection中獲取流進行保存
*
*/
public static HttpURLConnection postStream(String url, Map<String, String> headers, Map<String, String> params) {
StringBuffer urlParam = buildHttpQueryParams(params);
HttpURLConnection httpConn = initHttpUrl(url, headers, null);
// 設置參數
httpConn.setDoOutput(true); // 需要輸出
httpConn.setDoInput(true); // 需要輸入
httpConn.setUseCaches(false); // 不允許緩存
try {
httpConn.setRequestMethod("POST");
} catch (ProtocolException e1) {
e1.printStackTrace();
} // 設置POST方式連接
httpConn.setInstanceFollowRedirects(true); // 設置跟隨重定向
// 連接,也可以不用明文connect,使用下面的httpConn.getOutputStream()會自動connect
// httpConn.connect();
DataOutputStream dos = null;
try {
// 建立輸入流,向指向的URL傳入參數 ,支持的格式是 key=value&key=value
dos = new DataOutputStream(httpConn.getOutputStream());
dos.writeBytes(urlParam.toString());
dos.flush();
} catch (IOException e1) {
e1.printStackTrace();
} finally {
close(dos);
}
return httpConn;
}
}
使用工具類
使用案例
import java.util.HashMap;
import java.util.Map;
import com.litong.utils.http.alithttpclient.JdkHttpClient;
public class BiaoBeiClient {
private String accessTokenUrl = "https://openapi.data-baker.com/oauth/2.0/token";
private String checkTokenUrl = "https://openapi.data-baker.com/api/checkToken";
private String ttsUrl = "https://openapi.data-baker.com/tts";
private String clientId = "xxe";
private String clientSecret = "xxx";
public String getAccessToken() {
HashMap<String, String> params = new HashMap<>();
params.put("grant_type", "client_credentials");
params.put("client_id", clientId);
params.put("client_secret", clientSecret);
StringBuffer strBuf = JdkHttpClient.get(accessTokenUrl, null, params);
return strBuf.toString();
}
public String checkToken(String accessToken) {
Map<String, String> hdeader = new HashMap<>();
hdeader.put("content-type", "application/json");
Map<String, String> params = new HashMap<>();
params.put("access_token", accessToken);
StringBuffer strBuf = JdkHttpClient.get(checkTokenUrl, hdeader, params);
return strBuf.toString();
}
public String tts(String accessToken, String language, String voiceName, String text) {
Map<String, String> params = new HashMap<>();
params.put("access_token", accessToken);
params.put("domain", "1");
params.put("language", language);
params.put("voice_name", voiceName);
params.put("text", text);
StringBuffer strbuf = JdkHttpClient.post(ttsUrl, null, params);
return strbuf.toString();
}
}
private String accessToken;
private Long expireTime = 0L;
public boolean isExpires() {
return System.currentTimeMillis() > expireTime;
}
public String getAccessToken() {
HashMap<String, String> params = new HashMap<>();
params.put("grant_type", "client_credentials");
params.put("client_id", clientId);
params.put("client_secret", clientSecret);
StringBuffer strBuf = JdkHttpClient.get(accessTokenUrl, null, params);
return strBuf.toString();
}
public String checkToken(String accessToken) {
Map<String, String> hdeader = new HashMap<>();
hdeader.put("content-type", "application/json");
Map<String, String> params = new HashMap<>();
params.put("access_token", accessToken);
StringBuffer strBuf = JdkHttpClient.get(checkTokenUrl, hdeader, params);
return strBuf.toString();
}
public String tts(String accessToken, String language, String voiceName, String text) {
Map<String, String> params = new HashMap<>();
params.put("access_token", accessToken);
params.put("domain", "1");
params.put("language", language);
params.put("voice_name", voiceName);
params.put("text", text);
StringBuffer strbuf = JdkHttpClient.post(ttsUrl, null, params);
return strbuf.toString();
}
}