Java實現模擬傳送POST、GET請求
阿新 • • 發佈:2019-01-06
——————————————————————————————————
[java] view plain copy print?- import org.apache.http.HttpEntity;
- import org.apache.http.client.config.RequestConfig;
- import org.apache.http.client.entity.UrlEncodedFormEntity;
- import org.apache.http.client.methods.CloseableHttpResponse;
- import org.apache.http.client.methods.HttpPost;
- import org.apache.http.impl.client.CloseableHttpClient;
- import org.apache.http.impl.client.HttpClients;
- import org.apache.http.message.BasicNameValuePair;
- import org.apache.http.util.EntityUtils;
- import org.apache.log4j.Logger;
- import java.io.BufferedReader;
- import java.io.IOException;
- import
- import java.io.OutputStreamWriter;
- import java.net.HttpURLConnection;
- import java.net.URL;
- import java.net.URLConnection;
- import java.util.List;
- import java.util.Map;
- publicclass HttpRequestUtils {
- privatestatic Logger logger = Logger.getLogger(HttpRequestUtils.
- privatestaticfinalint connectTimeout = 1000 * 120; // 連線超時時間
- privatestaticfinalint socketTimeout = 1000 * 180; // 讀取資料超時時間
- /**
- * 向指定 URL 傳送 POST請求
- *
- * @param strUrl 傳送請求的 URL
- * @param requestParams 請求引數,格式 name1=value1&name2=value2
- * @return 遠端資源的響應結果
- */
- publicstatic String sendPost(String strUrl, String requestParams) {
- logger.info(”sendPost strUrl:” + strUrl);
- logger.info(”sendPost requestParams:” + requestParams);
- URL url = null;
- HttpURLConnection httpURLConnection = null;
- try {
- url = new URL(strUrl);
- httpURLConnection = (HttpURLConnection) url.openConnection();
- httpURLConnection.setDoOutput(true);
- httpURLConnection.setDoInput(true);
- httpURLConnection.setRequestMethod(”POST”);
- httpURLConnection.setUseCaches(false);
- httpURLConnection.setRequestProperty(”Accept”, “application/json”); // 設定接收資料的格式
- httpURLConnection.setRequestProperty(”Content-Type”, “application/json”); // 設定傳送資料的格式
- httpURLConnection.connect(); // 建立連線
- OutputStreamWriter outputStreamWriter = new OutputStreamWriter(
- httpURLConnection.getOutputStream(), ”UTF-8”);
- outputStreamWriter.append(requestParams);
- outputStreamWriter.flush();
- outputStreamWriter.close();
- // 使用BufferedReader輸入流來讀取URL的響應
- BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(
- httpURLConnection.getInputStream(), ”utf-8”));
- StringBuffer stringBuffer = new StringBuffer();
- String strLine = ”“;
- while ((strLine = bufferedReader.readLine()) != null) {
- stringBuffer.append(strLine);
- }
- bufferedReader.close();
- String responseParams = stringBuffer.toString();
- logger.info(”sendPost responseParams:” + responseParams);
- return responseParams;
- } catch (IOException e) {
- logger.info(”sendPost IOException:” + e.getMessage());
- } finally {
- if (httpURLConnection != null) {
- httpURLConnection.disconnect();
- }
- }
- returnnull;
- }
- /**
- * HttpClientPost 方式,向指定 URL 傳送 POST請求
- *
- * @param strUrl 傳送請求的 URL
- * @param requestParams 請求引數
- * @return 遠端資源的響應結果
- */
- publicstatic String doPost(String strUrl, List<BasicNameValuePair> requestParams) {
- logger.info(”doPost strUrl:” + strUrl);
- logger.info(”doPost requestParams:” + requestParams);
- String responseParams = ”“;
- StringBuffer stringBuffer = new StringBuffer();
- long startTime = 0, endTime = 0;
- CloseableHttpClient closeableHttpClient = HttpClients.createDefault();
- RequestConfig requestConfig = RequestConfig.custom()
- .setConnectTimeout(connectTimeout)
- .setSocketTimeout(socketTimeout)
- .build(); // 設定請求和傳輸超時時間
- HttpPost httpPost = new HttpPost(strUrl);
- httpPost.setConfig(requestConfig);
- HttpEntity httpEntity;
- try {
- if (requestParams != null) {
- // 設定相關引數
- httpEntity = new UrlEncodedFormEntity(requestParams, “UTF-8”);
- httpPost.setEntity(httpEntity);
- logger.info(”doPost requestParams:” + EntityUtils.toString(httpEntity));
- }
- startTime = System.nanoTime();
- CloseableHttpResponse closeableHttpResponse = closeableHttpClient.execute(httpPost);
- int code = closeableHttpResponse.getStatusLine().getStatusCode();
- logger.info(”doPost 狀態碼:” + code);
- if (code == 200 || code == 500) {
- try {
- httpEntity = closeableHttpResponse.getEntity();
- if (httpEntity != null) {
- long length = httpEntity.getContentLength();
- // 當返回值長度較小的時候,使用工具類讀取
- if (length != -1 && length < 2048) {
- stringBuffer.append(EntityUtils.toString(httpEntity));
- } else { // 否則使用IO流來讀取
- BufferedReader bufferedReader = new BufferedReader(
- new InputStreamReader(httpEntity.getContent(), “UTF-8”));
- String line;
- while ((line = bufferedReader.readLine()) != null) {
- stringBuffer.append(line);
- }
- bufferedReader.close();
- responseParams = stringBuffer.toString();
- }
- endTime = System.nanoTime();
- }
- } catch (Exception e) {
- endTime = System.nanoTime();
- logger.info(”doPost Exception(通訊錯誤):” + e.getMessage());
- } finally {
- closeableHttpResponse.close();
- }
- } else {
- endTime = System.nanoTime();
- httpPost.abort();
- logger.info(”doPost 錯誤請求,狀態碼:” + code);
- }
- } catch (IOException e) {
- endTime = System.nanoTime();
- logger.info(”doPost IOException:” + e.getMessage());
- } finally {
- try {
- closeableHttpClient.close();
- } catch (IOException e) {
- }
- }
- logger.info(”doPost 用時(毫秒):” + (endTime - startTime) / 1000000L);
- logger.info(”doPost responseParams:” + responseParams);
- return responseParams;
- }
- /**
- * 向指定 URL 傳送 GET請求
- *
- * @param strUrl 傳送請求的 URL
- * @param requestParams 請求引數
- * @return 遠端資源的響應結果
- */
- publicstatic String sendGet(String strUrl, String requestParams) {
- logger.info(”sendGet strUrl:” + strUrl);
- logger.info(”sendGet requestParams:” + requestParams);
- String responseParams = ”“;
- BufferedReader bufferedReader = null;
- try {
- String strRequestUrl = strUrl + ”?” + requestParams;
- URL url = new URL(strRequestUrl);
- URLConnection urlConnection = url.openConnection(); // 開啟與 URL 之間的連線
- // 設定通用的請求屬性
- urlConnection.setRequestProperty(”accept”, “*/*”);
- urlConnection.setRequestProperty(”connection”, “Keep-Alive”);
- urlConnection.setRequestProperty(”user-agent”,
- ”Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)”);
- urlConnection.connect(); // 建立連線
- Map<String, List<String>> map = urlConnection.getHeaderFields(); // 獲取所有響應頭欄位
- // 使用BufferedReader輸入流來讀取URL的響應
- bufferedReader = new BufferedReader(new InputStreamReader(
- urlConnection.getInputStream()));
- String strLine;
- while ((strLine = bufferedReader.readLine()) != null) {
- responseParams += strLine;
- }
- } catch (Exception e) {
- logger.info(”sendGet Exception:” + e.getMessage());
- } finally {
- try {
- if (bufferedReader != null) {
- bufferedReader.close();
- }
- } catch (Exception e2) {
- e2.printStackTrace();
- }
- }
- logger.info(”sendPost responseParams:” + responseParams);
- return responseParams;
- }
- }
import org.apache.http.HttpEntity;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.apache.log4j.Logger;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;
public class HttpRequestUtils {
private static Logger logger = Logger.getLogger(HttpRequestUtils.class);
private static final int connectTimeout = 1000 * 120; // 連線超時時間
private static final int socketTimeout = 1000 * 180; // 讀取資料超時時間
/**
* 向指定 URL 傳送 POST請求
*
* @param strUrl 傳送請求的 URL
* @param requestParams 請求引數,格式 name1=value1&name2=value2
* @return 遠端資源的響應結果
*/
public static String sendPost(String strUrl, String requestParams) {
logger.info("sendPost strUrl:" + strUrl);
logger.info("sendPost requestParams:" + requestParams);
URL url = null;
HttpURLConnection httpURLConnection = null;
try {
url = new URL(strUrl);
httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setDoOutput(true);
httpURLConnection.setDoInput(true);
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setUseCaches(false);
httpURLConnection.setRequestProperty("Accept", "application/json"); // 設定接收資料的格式
httpURLConnection.setRequestProperty("Content-Type", "application/json"); // 設定傳送資料的格式
httpURLConnection.connect(); // 建立連線
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(
httpURLConnection.getOutputStream(), "UTF-8");
outputStreamWriter.append(requestParams);
outputStreamWriter.flush();
outputStreamWriter.close();
// 使用BufferedReader輸入流來讀取URL的響應
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(
httpURLConnection.getInputStream(), "utf-8"));
StringBuffer stringBuffer = new StringBuffer();
String strLine = "";
while ((strLine = bufferedReader.readLine()) != null) {
stringBuffer.append(strLine);
}
bufferedReader.close();
String responseParams = stringBuffer.toString();
logger.info("sendPost responseParams:" + responseParams);
return responseParams;
} catch (IOException e) {
logger.info("sendPost IOException:" + e.getMessage());
} finally {
if (httpURLConnection != null) {
httpURLConnection.disconnect();
}
}
return null;
}
/**
* HttpClientPost 方式,向指定 URL 傳送 POST請求
*
* @param strUrl 傳送請求的 URL
* @param requestParams 請求引數
* @return 遠端資源的響應結果
*/
public static String doPost(String strUrl, List<BasicNameValuePair> requestParams) {
logger.info("doPost strUrl:" + strUrl);
logger.info("doPost requestParams:" + requestParams);
String responseParams = "";
StringBuffer stringBuffer = new StringBuffer();
long startTime = 0, endTime = 0;
CloseableHttpClient closeableHttpClient = HttpClients.createDefault();
RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout(connectTimeout)
.setSocketTimeout(socketTimeout)
.build(); // 設定請求和傳輸超時時間
HttpPost httpPost = new HttpPost(strUrl);
httpPost.setConfig(requestConfig);
HttpEntity httpEntity;
try {
if (requestParams != null) {
// 設定相關引數
httpEntity = new UrlEncodedFormEntity(requestParams, "UTF-8");
httpPost.setEntity(httpEntity);
logger.info("doPost requestParams:" + EntityUtils.toString(httpEntity));
}
startTime = System.nanoTime();
CloseableHttpResponse closeableHttpResponse = closeableHttpClient.execute(httpPost);
int code = closeableHttpResponse.getStatusLine().getStatusCode();
logger.info("doPost 狀態碼:" + code);
if (code == 200 || code == 500) {
try {
httpEntity = closeableHttpResponse.getEntity();
if (httpEntity != null) {
long length = httpEntity.getContentLength();
// 當返回值長度較小的時候,使用工具類讀取
if (length != -1 && length < 2048) {
stringBuffer.append(EntityUtils.toString(httpEntity));
} else { // 否則使用IO流來讀取
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(httpEntity.getContent(), "UTF-8"));
String line;
while ((line = bufferedReader.readLine()) != null) {
stringBuffer.append(line);
}
bufferedReader.close();
responseParams = stringBuffer.toString();
}
endTime = System.nanoTime();
}
} catch (Exception e) {
endTime = System.nanoTime();
logger.info("doPost Exception(通訊錯誤):" + e.getMessage());
} finally {
closeableHttpResponse.close();
}
} else {
endTime = System.nanoTime();
httpPost.abort();
logger.info("doPost 錯誤請求,狀態碼:" + code);
}
} catch (IOException e) {
endTime = System.nanoTime();
logger.info("doPost IOException:" + e.getMessage());
} finally {
try {
closeableHttpClient.close();
} catch (IOException e) {
}
}
logger.info("doPost 用時(毫秒):" + (endTime - startTime) / 1000000L);
logger.info("doPost responseParams:" + responseParams);
return responseParams;
}
/**
* 向指定 URL 傳送 GET請求
*
* @param strUrl 傳送請求的 URL
* @param requestParams 請求引數
* @return 遠端資源的響應結果
*/
public static String sendGet(String strUrl, String requestParams) {
logger.info("sendGet strUrl:" + strUrl);
logger.info("sendGet requestParams:" + requestParams);
String responseParams = "";
BufferedReader bufferedReader = null;
try {
String strRequestUrl = strUrl + "?" + requestParams;
URL url = new URL(strRequestUrl);
URLConnection urlConnection = url.openConnection(); // 開啟與 URL 之間的連線
// 設定通用的請求屬性
urlConnection.setRequestProperty("accept", "*/*");
urlConnection.setRequestProperty("connection", "Keep-Alive");
urlConnection.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
urlConnection.connect(); // 建立連線
Map<String, List<String>> map = urlConnection.getHeaderFields(); // 獲取所有響應頭欄位
// 使用BufferedReader輸入流來讀取URL的響應
bufferedReader = new BufferedReader(new InputStreamReader(
urlConnection.getInputStream()));
String strLine;
while ((strLine = bufferedReader.readLine()) != null) {
responseParams += strLine;
}
} catch (Exception e) {
logger.info("sendGet Exception:" + e.getMessage());
} finally {
try {
if (bufferedReader != null) {
bufferedReader.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
logger.info("sendPost responseParams:" + responseParams);
return responseParams;
}
}
——————————————————————————————————