package com.shove.util;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class HttpClient {
public static final String REQUEST_METHOD_POST = "POST";
public static final String REQUEST_METHOD_GET = "GET";
private HttpURLConnection connection;
private String paramStr;
private boolean error;
public HttpClient(String urlStr, String method) {
this(urlStr, method, 30 * 1000);
}
/**
* @param urlStr
* @param method
* @param timerout
*/
public HttpClient(String urlStr, String method, int timerout) {
URL url = null;
try {
url = new URL(urlStr);
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod(method);
connection.setUseCaches(false);
connection.setConnectTimeout(timerout);
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestProperty("Cache-Control", "no-cache");
connection.connect();
} catch (MalformedURLException e) {
e.printStackTrace();
error = true;
} catch (IOException e) {
e.printStackTrace();
error = true;
}
}
public HttpClient addParams(String key, String value) {
if (paramStr == null || paramStr.length() == 0)
paramStr = key + "=" + value;
else
paramStr += "&" + key + "=" + value;
return this;
}
public void addParams(Map<String, Object> params) {
Set<String> keys = params.keySet();
for (Iterator<String> it = keys.iterator(); it.hasNext();) {
String key = it.next();
addParams(key, params.get(key).toString());
}
}
public InputStream excuteInputStream() {
InputStream in = null;
if (!error) {
try {
if (paramStr != null && paramStr.length() > 0) {
connection.getOutputStream().write(paramStr.getBytes());
}
in = connection.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
}
return in;
}
public String excute() throws IOException {
String info = "";
if (!error) {
if (paramStr != null && paramStr.length() > 0) {
connection.getOutputStream().write(paramStr.getBytes());
}
InputStream inputStream = connection.getInputStream();
BufferedReader bf = new BufferedReader(new InputStreamReader(
inputStream));
String s = null;
while ((s = bf.readLine()) != null) {
info += s;
}
} else
info = null;
return info;
}
public int getLength() {
return connection.getContentLength();
}
public boolean isError() {
return error;
}
/**
* 创建服务端 交互 并 返回响应
* @param form 参数 格式 "?xx=x1&bb=b1"
* @param toUrl 访问 地址
* @param method 访问方式 默认POST
* @param charset 编码方式 默认UTF-8
* @return
* @throws Exception
*/
public static HttpURLConnection getHttpURLConnection(String form, String toUrl,
String method, String charset) throws Exception {
URL url = new URL(toUrl);
byte[] data = form.getBytes();
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
conn.setUseCaches(false);
conn.setDoOutput(true);
conn.setRequestMethod(method.equals("") ? REQUEST_METHOD_POST : REQUEST_METHOD_GET);
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("Charset", charset.equals("") ? "UTF-8"
: charset);
conn.setRequestProperty("Content-Length", String.valueOf(data.length));
conn.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
DataOutputStream outStream = new DataOutputStream(
conn.getOutputStream());
outStream.write(data);
outStream.flush();
return conn;
}
/**
* 创建服务端 交互 并 返回响应
* @param form 参数 格式 "?xx=x1&bb=b1"
* @param toUrl 访问 地址
* @param name 查找的关键字
* @param method 访问方式 默认POST
* @param charset 编码方式 默认UTF-8
* @return
* @throws Exception
*/
public static HttpURLConnection getHttpURLSearch(String form, String toUrl,String name,
String method, String charset) throws Exception {
byte[] data = form.getBytes();
URL url = new URL(toUrl+java.net.URLEncoder.encode(name));
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
conn.setUseCaches(false);
conn.setDoOutput(true);
conn.setRequestMethod(method.equals("") ? REQUEST_METHOD_POST : REQUEST_METHOD_GET);
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("Charset", charset.equals("") ? "UTF-8"
: charset);
conn.setRequestProperty("Content-Length", String.valueOf(data.length));
conn.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
DataOutputStream outStream = new DataOutputStream(
conn.getOutputStream());
outStream.write(data);
outStream.flush();
return conn;
}
}