Java 傳送http請求
阿新 • • 發佈:2018-12-01
傳送GET方法的請求
/**
* 向指定URL傳送GET方法的請求
* @param url 傳送請求的URL
* @param param 請求引數,格式:name1=value1&name2=value2
* @return String 響應結果
*/
public static String sendGet(String url, String param) {
String result = "";
BufferedReader in = null ;
try {
String urlNameString = url + "?" + param;
URL realUrl = new URL(urlNameString);
// 開啟和URL之間的連線
HttpURLConnection connection = (HttpURLConnection)realUrl.openConnection();
// 設定通用的請求屬性
connection.setRequestProperty("accept" , "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 建立實際的連線
connection.connect();
// 獲取所有響應頭欄位
Map<String, List<String>> map = connection.getHeaderFields();
// 遍歷所有的響應頭欄位
for (String key : map.keySet()) {
System.out.println(key + "--->" + map.get(key));
}
// 定義 BufferedReader輸入流來讀取URL的響應
in = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println("傳送GET請求出現異常!" + e);
e.printStackTrace();
}
// 使用finally塊來關閉輸入流
finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
return result;
}
傳送POST方法的請求
/**
* 向指定 URL 傳送POST方法的請求
* @param url 傳送請求的 URL
* @param param 請求引數,格式: name1=value1&name2=value2
* @return 響應結果
*/
public static String sendPost(String url, String param) {
PrintWriter out = null;
BufferedReader in = null;
String result = "";
try {
URL realUrl = new URL(url);
// 開啟和URL之間的連線
URLConnection conn = realUrl.openConnection();
// 設定通用的請求屬性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 傳送POST請求必須設定如下兩行
conn.setDoOutput(true);
conn.setDoInput(true);
// 獲取URLConnection物件對應的輸出流
out = new PrintWriter(conn.getOutputStream());
// 傳送請求引數
out.print(param);
// flush輸出流的緩衝
out.flush();
// 定義BufferedReader輸入流來讀取URL的響應
in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} 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();
}
}
return result;
}
傳送引數為json型別的POST請求
/**
傳送HttpPost請求
* @param strURL 服務地址
* @param params Map型別的引數,再用JSONUtils工具把map轉化成json
* @return 成功:返回json字串<br/>
*/
public static String jsonPost(String strURL, Map<String, String> params) {
try {
URL url = new URL(strURL);// 建立連線
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setUseCaches(false);
connection.setInstanceFollowRedirects(true);
connection.setRequestMethod("POST"); // 設定請求方式
connection.setRequestProperty("Accept", "application/json"); // 設定接收資料的格式
connection.setRequestProperty("Content-Type", "application/json"); // 設定傳送資料的格式
connection.connect();
OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8"); // utf-8編碼
out.append(JSONUtils.obj2String(params));
out.flush();
out.close();
int code = connection.getResponseCode();
InputStream is = null;
if (code == 200) {
is = connection.getInputStream();
} else {
is = connection.getErrorStream();
}
// 讀取響應
int length = (int) connection.getContentLength();// 獲取長度
if (length != -1) {
byte[] data = new byte[length];
byte[] temp = new byte[512];
int readLen = 0;
int destPos = 0;
while ((readLen = is.read(temp)) > 0) {
System.arraycopy(temp, 0, data, destPos, readLen);
destPos += readLen;
}
String result = new String(data, "UTF-8"); // utf-8編碼
System.out.println(result);
return result;
}
} catch (IOException e) {
logger.error("Exception occur when send http post request!", e);
System.out.println(e);
}
return "error"; // 自定義錯誤資訊
}
完整程式碼
HttpRequest.java
/**
* Created by pc on 2018/6/29.
*/
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class HttpRequest {
/**
* 向指定URL傳送GET方法的請求
* @param url 傳送請求的URL
* @param param 請求引數,格式:name1=value1&name2=value2
* @return String 響應結果
*/
public static String sendGet(String url, String param) {
String result = "";
BufferedReader in = null;
try {
String urlNameString = url + "?" + param;
URL realUrl = new URL(urlNameString);
// 開啟和URL之間的連線
HttpURLConnection connection = (HttpURLConnection)realUrl.openConnection();
// 設定通用的請求屬性
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 建立實際的連線
connection.connect();
// 獲取所有響應頭欄位
Map<String, List<String>> map = connection.getHeaderFields();
// 遍歷所有的響應頭欄位
for (String key : map.keySet()) {
System.out.println(key + "--->" + map.get(key));
}
// 定義 BufferedReader輸入流來讀取URL的響應
in = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println("傳送GET請求出現異常!" + e);
e.printStackTrace();
}
// 使用finally塊來關閉輸入流
finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
return result;
}
/**
* 向指定 URL 傳送POST方法的請求
* @param url 傳送請求的 URL
* @param param 請求引數,格式: name1=value1&name2=value2
* @return 響應結果
*/
public static String sendPost(String url, String param) {
PrintWriter out = null;
BufferedReader in = null;
String result = "";
try {
URL realUrl = new URL(url);
// 開啟和URL之間的連線
URLConnection conn = realUrl.openConnection();
// 設定通用的請求屬性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 傳送POST請求必須設定如下兩行
conn.setDoOutput(true);
conn.setDoInput(true);
// 獲取URLConnection物件對應的輸出流
out = new PrintWriter(conn.getOutputStream());
// 傳送請求引數
out.print(param);
// flush輸出流的緩衝
out.flush();
// 定義BufferedReader輸入流來讀取URL的響應
in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} 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();
}
}
return result;
}
/**
傳送HttpPost請求
* @param strURL 服務地址
* @param params 傳入Map型別的引數,再用JSONUtils工具把map轉化成json
* @return 成功:返回json字串<br/>
*/
public static String jsonPost(String strURL, Map<String, String> params) {
try {
URL url = new URL(strURL);// 建立連線
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setUseCaches(false);
connection.setInstanceFollowRedirects(true);
connection.setRequestMethod("POST"); // 設定請求方式
connection.setRequestProperty("Accept", "application/json"); // 設定接收資料的格式
connection.setRequestProperty("Content-Type", "application/json"); // 設定傳送資料的格式
connection.connect();
OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8"); // utf-8編碼
out.append(JSONUtils.obj2String(params));
out.flush();
out.close();
int code = connection.getResponseCode();
InputStream is = null;
if (code == 200) {
is = connection.getInputStream();
} else {
is = connection.getErrorStream();
}
// 讀取響應
int length = (int) connection.getContentLength();// 獲取長度
if (length != -1) {
byte[] data = new byte[length];
byte[] temp = new byte[512];
int readLen = 0;
int destPos = 0;
while ((readLen = is.read(temp)) > 0) {
System.arraycopy(temp, 0, data, destPos, readLen);
destPos += readLen;
}
String result = new String(data, "UTF-8"); // utf-8編碼
System.out.println(result);
return result;
}
} catch (IOException e) {
System.out.println(e);
}
return "error"; // 自定義錯誤資訊
}
}
JSONUtils.java
package com.chinawayltd.test;
import org.codehaus.jackson.map.DeserializationConfig;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;
import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion;
import org.codehaus.jackson.type.JavaType;
import java.io.IOException;
import java.text.SimpleDateFormat;
/**
* Created by pc on 2018/6/29.
*/
public class JSONUtils {
private static ObjectMapper objectMapper = new ObjectMapper();
static {
// 物件欄位全部列入
objectMapper.setSerializationInclusion(Inclusion.NON_DEFAULT);
// 取消預設轉換timestamps形式
objectMapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS,false);
// 忽略空bean轉json的錯誤
objectMapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS,false);
// 統一日期格式yyyy-MM-dd HH:mm:ss
objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
// 忽略在json字串中存在,但是在java物件中不存在對應屬性的情況
objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES,false);
}
/**
* Object轉json字串
* @param obj
* @param <T>
* @return
*/
public static <T> String obj2String(T obj){
if (obj == null){
return null;
}
try {
return obj instanceof String ? (String) obj : objectMapper.writeValueAsString(obj);
} catch (Exception e) {
System.out.println("Parse object to String error");
e.printStackTrace();
return null;
}
}
/**
* Object轉json字串並格式化美化
* @param obj
* @param <T>
* @return
*/
public static <T> String obj2StringPretty(T obj){
if (obj == null){
return null;
}
try {
return obj instanceof String ? (String) obj : objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);
} catch (Exception e) {
System.out.println("Parse object to String error");
e.printStackTrace();
return null;
}
}
/**
* string轉object 用於轉為集合物件
* @param str json字串
* @param collectionClass 被轉集合class
* @param elementClasses 被轉集合中物件型別class
* @param <T>
* @return
*/
public static <T> T string2Obj(String str,Class<?> collectionClass,Class<?>... elementClasses){
JavaType javaType = objectMapper.getTypeFactory().constructParametricType(collectionClass,elementClasses);
try {
return objectMapper.readValue(str,javaType);
} catch (IOException e) {
System.out.println("Parse String to Object error");
e.printStackTrace();
return null;
}
}
}