主类 TriHttpRequest (请求类)
import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.SocketTimeoutException; import java.net.URL; import java.net.URLEncoder; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class TriHttpRequest { String method = "GET"; String charsetName; String contentType="application/json"; URL url; String body; List<String> postParamKeys = new ArrayList(); List<String> postParamValues = new ArrayList(); List<String> getParamKeys = new ArrayList(); List<String> getParamValues = new ArrayList(); Map<String, String> headers = new HashMap(); HttpURLConnection conn = null; InputStream in = null; public int timeout = 10000; public static TriHttpRequest create(URL u, String charsetName) throws IOException { return new TriHttpRequest(u, charsetName); } public static TriHttpRequest create(String sUrl, String charsetName) throws IOException { return new TriHttpRequest(sUrl, charsetName); } public TriHttpRequest(URL u, String charsetName) throws IOException { this.url = u; this.charsetName = charsetName; } public TriHttpRequest(String sUrl, String charsetName) throws IOException { this.url = new URL(sUrl); this.charsetName = charsetName; } public List<String> getPostKeys() { return this.postParamKeys; } public List<String> getPostValues() { return this.postParamValues; } public List<String> getGetKeys() { return this.getParamKeys; } public List<String> getGetValues() { return this.getParamValues; } public TriHttpRequest setBody(String body){ this.body=body; return this; } public TriHttpRequest addPostValue(String key, String value) { this.postParamKeys.add(key); this.postParamValues.add(value); return this; } public TriHttpRequest addPostValue(String key, Object value) { addPostValue(key, value.toString()); return this; } public TriHttpRequest setPostValues(Map<String, String> map) { this.postParamKeys = new ArrayList(map.keySet()); this.postParamValues = new ArrayList(map.values()); return this; } public TriHttpRequest addGetValue(String key, String value) { this.getParamKeys.add(key); this.getParamValues.add(value); return this; } public TriHttpRequest addGetValue(String key, Object value) { addGetValue(key, value.toString()); return this; } public TriHttpRequest setGetValues(Map<String, String> map) { this.getParamKeys = new ArrayList(map.keySet()); this.getParamValues = new ArrayList(map.values()); return this; } public TriHttpRequest setHeader(String key, String value) { this.headers.put(key, value); return this; } public TriHttpRequest setHeaders(Map<String, String> map) { this.headers = map; return this; } public TriHttpRequest setMethod(String m) { this.method = m; return this; } public int timeout() { return this.timeout; } public TriHttpRequest setTimeout(int timeoutMilliseconds) { this.timeout = timeoutMilliseconds; return this; } private String getGetURL() { StringBuilder b = new StringBuilder(); String prefix = ""; int l = this.getParamKeys.size(); for (int i = 0; i < l; ++i) { String k = (String) this.getParamKeys.get(i); b.append(prefix); prefix = "&"; b.append(encode(k)).append("=").append(encode((String) this.getParamValues.get(i))); } return b.toString(); } private String getPostParms() { StringBuilder b = new StringBuilder(); String prefix = ""; int l = this.postParamKeys.size(); for (int i = 0; i < l; ++i) { String k = (String) this.postParamKeys.get(i); b.append(prefix); prefix = "&"; b.append(encode(k)).append("=").append(encode((String) this.postParamValues.get(i))); } return b.toString(); } public TriHttpResponse request() throws IOException { return request(this.method); } public void setContentType(String contentType){ this.contentType=contentType; } public TriHttpResponse request(String requestMethod) throws IOException, SocketTimeoutException { if (this.getParamKeys.size() > 0) { String parms = getGetURL(); String us = this.url.toString(); if (us.contains("?")) this.url = new URL(this.url.toString().concat(parms)); else { this.url = new URL(this.url.toString().concat("?").concat(parms)); } } this.conn = ((HttpURLConnection) this.url.openConnection()); this.conn.setRequestProperty("content-Type",this.contentType); this.conn.setConnectTimeout(this.timeout); this.conn.setRequestMethod(requestMethod.toUpperCase()); this.conn.setDoInput(true); if (this.headers.size() > 0) { for (String k : this.headers.keySet()) { this.conn.setRequestProperty(k, (String) this.headers.get(k)); } } if(this.body!=null){ // POST请求 this.conn.setDoOutput(true); DataOutputStream wr = new DataOutputStream(this.conn.getOutputStream()); wr.write(this.body.getBytes()); wr.flush(); wr.close(); } if (this.postParamKeys.size() > 0) { this.conn.setDoOutput(true); DataOutputStream wr = new DataOutputStream(this.conn.getOutputStream()); wr.writeBytes(getPostParms()); wr.flush(); wr.close(); } if (this.conn.getResponseCode() >= 400) this.in = this.conn.getErrorStream(); else { this.in = this.conn.getInputStream(); } return new TriHttpResponse(this.conn, this.in, this.charsetName); } public TriHttpResponse get() throws IOException, SocketTimeoutException { return request("GET"); } public TriHttpResponse head() throws IOException, SocketTimeoutException { return request("HEAD"); } public TriHttpResponse post() throws IOException, SocketTimeoutException { return request("POST"); } public TriHttpResponse put() throws IOException, SocketTimeoutException { return request("PUT"); } public TriHttpResponse delete() throws IOException, SocketTimeoutException { return request("DELETE"); } private String encode(String s) { try { return URLEncoder.encode(s, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return s; } public void close() { if (this.in != null) { try { this.in.close(); } catch (IOException e) { e.printStackTrace(); } } if (this.conn != null) this.conn.disconnect(); } public String getCharsetName() { return this.charsetName; } public void setCharsetName(String charsetName) { this.charsetName = charsetName; } }
结果类 TriHttpResponse
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.util.List; import java.util.Map; public class TriHttpResponse { InputStream in; BufferedReader reader; InputStreamReader inreader; int statuscode; Map<String, List<String>> header; HttpURLConnection conn; String recieveData; private String charsetName; public TriHttpResponse(HttpURLConnection conn, InputStream in, String charsetName) throws IOException { this.statuscode = conn.getResponseCode(); this.in = in; this.header = conn.getHeaderFields(); this.recieveData = null; this.charsetName = charsetName; } public boolean hasHeader(String key) { return this.header.containsKey(key); } public String getHeader(String key) { return ((String) ((List) this.header.get(key)).get(0)); } public List<String> getHeaderList(String key) { return ((List) this.header.get(key)); } public Map<String, List<String>> getHeaders() { return this.header; } public int getStatusCode() { return this.statuscode; } public InputStream getInputStream() { return this.in; } public InputStreamReader getInputStreamReader() throws UnsupportedEncodingException { if (this.inreader == null) this.inreader = new InputStreamReader(this.in, this.charsetName); return this.inreader; } public BufferedReader getReader() throws UnsupportedEncodingException { if (this.reader == null) this.reader = new BufferedReader(getInputStreamReader()); return this.reader; } public String getReponse() { try { InputStreamReader r = getInputStreamReader(); StringBuilder b = new StringBuilder(); char[] buffer = new char[4096]; int n = 0; while (-1 != (n = r.read(buffer))) { b.append(buffer, 0, n); } this.in.close(); this.recieveData = b.toString(); return this.recieveData; } catch (IOException e) { e.printStackTrace(); } return null; } }
使用方法:
TriHttpRequest req=TriHttpRequest(URL,"UTF-8"); req.setHeader(key,value); req.setContentType("text/plain"); req.addPostValue(key,value); TriHttpResponse rop=req.post();//GET方法类似 //如果是传入数据流 请用 req.setBody(str);