經過URLConnection/HttpURLConnection發送HTTP請求的方法

package com.util;java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.Iterator;
import java.util.Map;緩存

public class HttpConnectionUtil {app

// post請求
public static final String HTTP_POST = "POST";ide

// get請求
public static final String HTTP_GET = "GET";post

// utf-8字符編碼
public static final String CHARSET_UTF_8 = "utf-8";編碼

// HTTP內容類型。若是未指定ContentType,默認爲TEXT/HTML
public static final String CONTENT_TYPE_TEXT_HTML = "text/xml";url

// HTTP內容類型。至關於form表單的形式,提交暑假
public static final String CONTENT_TYPE_FORM_URL = "application/x-www-form-urlencoded";spa

// 請求超時時間
public static final int SEND_REQUEST_TIME_OUT = 50000;.net

// 將讀超時時間
public static final int READ_TIME_OUT = 50000;code

/**
*
* @param requestType
* 請求類型
* @param urlStr
* 請求地址
* @param body
* 請求發送內容
* @return 返回內容
*/
public static String requestMethod(String requestType, String urlStr, String body) {

// 是否有http正文提交
boolean isDoInput = false;
if (body != null && body.length() > 0)
isDoInput = true;
OutputStream outputStream = null;
OutputStreamWriter outputStreamWriter = null;
InputStream inputStream = null;
InputStreamReader inputStreamReader = null;
BufferedReader reader = null;
StringBuffer resultBuffer = new StringBuffer();
String tempLine = null;
try {
// 統一資源
URL url = new URL(urlStr);
// 鏈接類的父類,抽象類
URLConnection urlConnection = url.openConnection();
// http的鏈接類
HttpURLConnection httpURLConnection = (HttpURLConnection) urlConnection;

// 設置是否向httpUrlConnection輸出,由於這個是post請求,參數要放在
// http正文內,所以須要設爲true, 默認狀況下是false;
if (isDoInput) {
httpURLConnection.setDoOutput(true);
httpURLConnection.setRequestProperty("Content-Length", String.valueOf(body.length()));
}
// 設置是否從httpUrlConnection讀入,默認狀況下是true;
httpURLConnection.setDoInput(true);
// 設置一個指定的超時值(以毫秒爲單位)
httpURLConnection.setConnectTimeout(SEND_REQUEST_TIME_OUT);
// 將讀超時設置爲指定的超時,以毫秒爲單位。
httpURLConnection.setReadTimeout(READ_TIME_OUT);
// Post 請求不能使用緩存
httpURLConnection.setUseCaches(false);
// 設置字符編碼
httpURLConnection.setRequestProperty("Accept-Charset", CHARSET_UTF_8);
// 設置內容類型
httpURLConnection.setRequestProperty("Content-Type", CONTENT_TYPE_FORM_URL);
// 設定請求的方法,默認是GET
httpURLConnection.setRequestMethod(requestType);

// 打開到此 URL 引用的資源的通訊連接(若是還沒有創建這樣的鏈接)。
// 若是在已打開鏈接(此時 connected 字段的值爲 true)的狀況下調用 connect 方法,則忽略該調用。
httpURLConnection.connect();

if (isDoInput) {
outputStream = httpURLConnection.getOutputStream();
outputStreamWriter = new OutputStreamWriter(outputStream);
outputStreamWriter.write(body);
outputStreamWriter.flush();// 刷新
}
if (httpURLConnection.getResponseCode() >= 300) {
throw new Exception(
"HTTP Request is not success, Response code is " + httpURLConnection.getResponseCode());
}

if (httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
inputStream = httpURLConnection.getInputStream();
inputStreamReader = new InputStreamReader(inputStream);
reader = new BufferedReader(inputStreamReader);

while ((tempLine = reader.readLine()) != null) {
resultBuffer.append(tempLine);
resultBuffer.append("\n");
}
}

} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {// 關閉流

try {
if (outputStreamWriter != null) {
outputStreamWriter.close();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (outputStream != null) {
outputStream.close();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (reader != null) {
reader.close();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (inputStreamReader != null) {
inputStreamReader.close();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (inputStream != null) {
inputStream.close();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return resultBuffer.toString();
}

 

public static void main(String[] args) throws MalformedURLException {

System.out.println(requestMethod(HTTP_GET, "http://127.0.0.1:8080/test/TestHttpRequestServlet",
"username=123&password=我是誰"));

}
}

 POST

public static String post(String reqUrl, String body) throws IOException {
        URL serverUrl = new URL(reqUrl);
        HttpURLConnection conn = null;
        InputStreamReader isr = null;
        BufferedReader br = null;
        StringBuffer buffer = new StringBuffer();

        try {
            conn = (HttpURLConnection) serverUrl.openConnection();
            conn.setConnectTimeout(CONNECTION_TIMEOUT);
            conn.setReadTimeout(READ_TIMEOUT);
            conn.setRequestMethod("POST");
            conn.setDoOutput(true);
            conn.connect();

            conn.getOutputStream().write(body.getBytes(CharEncoding.UTF_8));

            isr = new InputStreamReader(conn.getInputStream(), CharEncoding.UTF_8);
            br = new BufferedReader(isr);

            for (String line = ""; (line = br.readLine()) != null;) {
                buffer.append(line);
            }
        } finally {
            if (null != br) {
                br.close();
            }
            if (null != isr) {
                isr.close();
            }
            if (null != conn) {
                conn.disconnect();
            }
        }

        return buffer.toString();
    }
View Code

GET

public static String get(String url) throws IOException {
        URL reqUrl = new URL(url);
        HttpURLConnection conn = null;
        InputStream inStream = null;
        InputStreamReader isr = null;
        BufferedReader br = null;
        StringBuffer buffer = new StringBuffer(1024);

        try {
            conn = (HttpURLConnection) reqUrl.openConnection();
            conn.setDoInput(true);
            conn.setDoOutput(true);
            conn.setAllowUserInteraction(false);
            conn.setUseCaches(false);
            conn.setRequestMethod("GET");

            inStream = conn.getInputStream();
            isr = new InputStreamReader(inStream, CharEncoding.UTF_8);
            br = new BufferedReader(isr);

            for (String line = ""; (line = br.readLine()) != null;) {
                buffer.append(line);
            }
        } finally {
            if (null != inStream) {
                inStream.close();
            }
            if (null != br) {
                br.close();
            }
            if (null != isr) {
                isr.close();
            }
            if (null != conn) {
                conn.disconnect();
            }
        }
        return buffer.toString();
    }
View Code
相關文章
相關標籤/搜索