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();
}
}