package test;
import java.io.BufferedReader;
import java.io.BufferedWriter;
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.URL;
import java.util.List;
import java.util.Map;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang.StringUtils;
import com.broadengate.common.Parameter;
import com.ruanko.ke.common.util.KEUtil;
public class HttpTool {
public static String host = "http://localhost:8080/KoclaExchange";
public static String key = "shehuizhuyihao";
private List<String> cookieString;
public String post(URL url, String content)
throws IOException {
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("content-type", "text/html");
conn.setRequestMethod(Parameter.POST);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
// Post请求对post的内容进行签名,Get请求对url进行签名
KEUtil keUtil = new KEUtil(3, 2);
String signature = keUtil.signature(content.getBytes());
conn.addRequestProperty("signature", signature);
// 向服务端写入数据.
OutputStream outputStream = conn.getOutputStream();
BufferedWriter bWriter = new BufferedWriter(new OutputStreamWriter(
outputStream, Parameter.chartset));
bWriter.write(content);
bWriter.flush();
bWriter.close();
// 取得服务端返回的数据.
StringBuffer responseStr = new StringBuffer("");
InputStream inputStream = conn.getInputStream();
BufferedReader bReader = new BufferedReader(new InputStreamReader(
inputStream, Parameter.chartset));
int c;
while ((c = bReader.read()) != -1) {
responseStr.append((char) c);
}
conn.disconnect();
System.out.println("请求地址:" + url);
return responseStr.toString();
}
public String get(URL url) throws IOException {
//如果还没有通过验证,取得服务端的随机码后进行验证
if (cookieString == null){
URL randomCodeURL = new URL(host + "/RandomCodeAction/gen.action");
HttpURLConnection randomCodeConn = (HttpURLConnection) randomCodeURL.openConnection();
randomCodeConn.setRequestMethod("GET");
StringBuffer randomCode = new StringBuffer("");
InputStream randomInputStream = randomCodeConn.getInputStream();
BufferedReader bReader = new BufferedReader(new InputStreamReader(randomInputStream, "UTF-8"));
int c;
while ((c = bReader.read()) != -1) {
randomCode.append((char) c);
}
String code = DigestUtils.md5Hex(key + randomCode.toString());
randomCodeConn.disconnect();
Map<String, List<String>> fields = randomCodeConn.getHeaderFields();
cookieString = fields.get("Set-Cookie");
String newURL = url.toString();
newURL = StringUtils.replaceOnce(newURL, "?", "?code=" + code + "&");
url = new URL(newURL);
}
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("Cookie", cookieString.get(0));
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
// 取得服务端返回的数据.
StringBuffer responseStr = new StringBuffer("");
InputStream inputStream = conn.getInputStream();
BufferedReader bReader = new BufferedReader(new InputStreamReader(
inputStream, "UTF-8"));
int c;
while ((c = bReader.read()) != -1) {
responseStr.append((char) c);
}
conn.disconnect();
System.out.println("请求地址:" + url);
return responseStr.toString();
}
public List<String> getCookieString() {
return cookieString;
}
public void setCookieString(List<String> cookieString) {
this.cookieString = cookieString;
}
}