最近在公司需要在第三方服務器上獲取一些數據,可是公司和其他公司沒有合作關係,只能通過發送跨域請求來獲取了。通過整理,將其寫成一個API接口,需要傳入四個參數
1、reqType:請求方式,post和get請求
2、reqHeaders:請求頭的設置,因爲在做的時候會對請求頭有一定的設置
3、reqParam:請求參數(post)
4、reqUrl:請求地址
下面就是我寫的方法
使用的API有
URL:匹配連接
URLconnecti : 建立連接
注意點:
1、在發送post請求時,需要將URLconnection的setDoinput和setDooutput設置爲true;
2、URLconnection的connect()方法其實在進行輸出流時就隱試的調用了
代碼
package cn.saleNc.uitl;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.Map;
public class urlConnect {
/**
*
* @param requrl 請求地址
* @param reqparam 請求參數
* @param reqHeaders 請求頭
* @param reqType 請求方式
* @return
*/
public static String reqGet(String requrl, String reqparam, String reqHeaders, String reqType ){
String result = "";
BufferedReader in = null;
PrintWriter out = null;
//真實的請求地址
String realUrl = "";
//判斷是哪種請求方式(默認以get請求方式)
if ( "post" == reqType ){
realUrl = requrl;
try {
URL url = new URL(realUrl);
//打開URL連接
URLConnection urlCon = url.openConnection();
//設置請求頭(判斷請求頭是否有設置的必要)
if ( reqHeaders.isEmpty() ){
String reqHeadersParam = reqHeaders.substring(1,reqHeaders.length());
String[] paramArr = reqHeadersParam.split(",");
String[] keyValue;
for (int n=0;n<paramArr.length;n++){
keyValue = paramArr[n].split(":");
urlCon.setRequestProperty(keyValue[0],keyValue[1]);
}
}
//設置下面兩行才能發送post請求(因爲post需要在URL通道中發送數據)
urlCon.setDoInput(true);
urlCon.setDoOutput(true);
//獲取輸出流
out = new PrintWriter(urlCon.getOutputStream());
//fluse輸出流
out.flush();
//獲取服務器的輸入流
in = new BufferedReader(new InputStreamReader(urlCon.getInputStream()));
String param;
while ( (param = in.readLine()) != null ){
result += param;
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
out.close();
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}else {
try {
realUrl = realUrl + "?" + reqparam;
URL url = new URL(realUrl);
// 打開和URL之間的連接
URLConnection connection = url.openConnection();
// 建立實際的連接
connection.connect();
// 定義 BufferedReader輸入流來讀取URL的響應
in = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
String param;
while ((param = in.readLine()) != null) {
result += param;
}
} catch (Exception e) {
e.printStackTrace();
}
// 使用finally塊來關閉輸入流
finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
return result;
}
}