網絡請求的工具類

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.CoreConnectionPNames;

/**
* java.net.URL工具類
*
*
*/
public class HttpURLTools {

/**
 * 
 * 使用HTTP的POST方法提交xml數據.
 * 
 * @param xml
 *            提交的xml數據
 * @param urlPath
 *            請求路徑
 * @return
 * 
 * 
 */
public static InputStream postXml(String xml, String urlPath) {
    try {
        URL url = new URL(urlPath);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        byte[] buff = xml.getBytes("UTF-8");
        conn.setConnectTimeout(10 * 1000);
        conn.setDoOutput(true); // 允許輸出
        conn.setUseCaches(false); // 不允許緩存
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Connection", "Keep-Alive");// 維持長連接
        conn.setRequestProperty("Charset", "UTF-8");
        conn.setRequestProperty("Content-Length",
                String.valueOf(buff.length)); // 設置長度
        conn.setRequestProperty("content-type", "text/html"); //類型
        DataOutputStream outStream = new DataOutputStream(
                conn.getOutputStream()); // 請求內容
        outStream.write(buff);
        outStream.flush();
        outStream.close();
        if (conn.getResponseCode() == 200) {
            // printResponse(conn);
            return conn.getInputStream(); // 返回得到數據
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

/**
 * 使用HTTP的POST方法提交的表單.
 * 
 * @param urlPath
 *            請求路徑
 * @param params
 *            請求參數
 * @param encoding
 *            請求參數編碼
 * @return 返回InputStream
 * @throws Exception
  */
public static InputStream postForm(String urlPath,
        Map<String, String> params, String encoding) {
    try {
        StringBuilder sb = new StringBuilder();
        for (Map.Entry<String, String> entry : params.entrySet()) {
            sb.append(entry.getKey()).append("=")
                    .append(URLEncoder.encode(entry.getValue(), encoding));
            sb.append("&");
        } // 拼接請求內容
        sb.deleteCharAt(sb.length() - 1);
        byte[] data = sb.toString().getBytes();
        URL url = new URL(urlPath);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setConnectTimeout(6 * 1000);
        conn.setDoOutput(true);// 發送post請求必須設置允許輸出
        conn.setUseCaches(false);// 不適用Cache
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Connection", "Keep-Alive");// 維持長連接
        conn.setRequestProperty("Charset", "UTF-8");
        conn.setRequestProperty("Content-Length",
                String.valueOf(data.length));
        conn.setRequestProperty("Content-Type",
                "application/x-www-form-urlencoded");  // 請求方式
        DataOutputStream dataOutStream = new DataOutputStream(
                conn.getOutputStream());// 發送請求內容
        dataOutStream.write(data);
        dataOutStream.flush();
        dataOutStream.close();
        if (conn.getResponseCode() == 200) {
            printResponse(conn);
            return conn.getInputStream();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

/**
 * 
 * 使用HTTP的POST方法單個上傳文件.
 * 
 * @param filePath
 *            文件路徑
 * @param urlPath
 *            請求路徑
 *
 */
public static void postFile(String urlPath, String filePath) {
    try {
        URL url = new URL(urlPath);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setDoOutput(true);
        conn.setDoInput(true);
        conn.setChunkedStreamingMode(1024 * 1024);
        conn.setRequestMethod("POST");
        conn.setRequestProperty("connection", "Keep-Alive");
        conn.setRequestProperty("Charsert", "UTF-8");
        File file = new File(filePath);
        conn.setRequestProperty("Content-Type", "multipart/form-data;file="
                + java.net.URLEncoder.encode(file.getName(), "UTF-8")); // 請求方式

        OutputStream out = new DataOutputStream(conn.getOutputStream());
        DataInputStream in = new DataInputStream(new FileInputStream(file));
        int bytes = 0;
        byte[] bufferOut = new byte[1024];
        while ((bytes = in.read(bufferOut)) != -1) {
            out.write(bufferOut, 0, bytes);
        }
        in.close();
        out.flush();
        out.close();
        printResponse(conn);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

/**
 * 
 * 使用HttpClient發送一個get方式的超鏈接請求.
 * 
 * @param urlpath
 * @return
 */
public static HttpResponse sendHttpGet(String urlpath) {
    HttpClient httpclient = new DefaultHttpClient();
    try {
        HttpGet httpget = new HttpGet(urlpath);
        httpclient.getParams().setParameter(
                CoreConnectionPNames.CONNECTION_TIMEOUT, 20000); // 設置請求超時時間
        httpclient.getParams().setParameter(
                CoreConnectionPNames.SO_TIMEOUT, 20000); // 讀取超時
        HttpResponse response = httpclient.execute(httpget);
        return response;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

/**
 * 
 * 使用HttpClient發送一個post方式的請求.
 * 
 * @param url
 * @param params
 * @return
 * @author shimiso
 * @update 2012-6-29 上午11:58:30
 */
public static HttpResponse sendHttpPost(String url,
        Map<String, String> params) {
    try {
        List<NameValuePair> param = new ArrayList<NameValuePair>(); // 參數
        if (params != null) {
            Iterator<Entry<String, String>> iterator = params.entrySet()
                    .iterator();
            while (iterator.hasNext()) {
                Entry<String, String> entry = iterator.next();
                param.add(new BasicNameValuePair(entry.getKey(), entry
                        .getValue()));
            }
        }

        HttpPost request = new HttpPost(url);
        HttpEntity entity = new UrlEncodedFormEntity(param, "UTF-8");
        request.setEntity(entity);
        HttpClient client = new DefaultHttpClient();
        client.getParams().setParameter(
                CoreConnectionPNames.CONNECTION_TIMEOUT, 20000); // 設置請求超時時間
        client.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,
                20000); // 讀取超時
        HttpResponse response = client.execute(request);
        if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
            return response;
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

/**
 * 
 * 獲取返回信息.
 * 
 * @param conn
 */
public static String printResponse(HttpURLConnection conn) {
    StringBuilder sb = new StringBuilder();
    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                conn.getInputStream()));
        String line;
        while ((line = reader.readLine()) != null) {
            sb.append("\n" + line);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return sb.toString();
}

}

發佈了8 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章