1 packagecom.xiwi;2 importjava.io.BufferedReader;3 importjava.io.IOException;4 importjava.io.InputStreamReader;5 importjava.io.OutputStreamWriter;6 importjava.net.HttpURLConnection;7 importjava.net.URL;8 importjava.net.URLEncoder;9 importjava.security.KeyManagementException;10 importjava.security.NoSuchAlgorithmException;11 importjava.security.SecureRandom;12 importjava.util.HashMap;13 importjava.util.Iterator;14 importjava.util.Map;15 importjavax.net.ssl.HostnameVerifier;16 importjavax.net.ssl.HttpsURLConnection;17 importjavax.net.ssl.SSLContext;18 importjavax.net.ssl.SSLSession;19 importjavax.net.ssl.TrustManager;20
21 /**
22 * Xiwi23 * HttpURLConnection类 封装24 *25 */
26 public classHttpUtils {27 private URL httpUrl = null;28 private HttpURLConnection httpConn = null;29
30 private Map httpHeaders = null;31 private String httpCookie = null;32 private String httpResult = null;33
34 //类的初始化 设置对HTTPS请求的支持
35 public HttpUtils ( ) throwsNoSuchAlgorithmException, KeyManagementException {36 SSLContext sslcontext = SSLContext.getInstance("SSL");37 TrustManager[] tm = {newMyX509TrustManager()};38 sslcontext.init(null, tm, newSecureRandom());39 HostnameVerifier ignoreHostnameVerifier = newHostnameVerifier() {40 public booleanverify ( String s, SSLSession sslsession ) {41 System.out.println("WARNING: Hostname is not matched for cert.");42 return true;43 }44 };45 HttpsURLConnection.setDefaultHostnameVerifier(ignoreHostnameVerifier);46 HttpsURLConnection.setDefaultSSLSocketFactory(sslcontext.getSocketFactory());47 }48
49
50 public Map getHeaders ( ) { returnhttpHeaders; }51 public void setHeader ( Mapheader ) {52 if ( httpHeaders == null ) httpHeaders = new HashMap();53 Iterator iterHeaders =header.keySet().iterator();54 while( iterHeaders.hasNext() ) {55 String key =iterHeaders.next();56 String value =header.get(key);57 httpHeaders.put(key, value);58 }59 }60
61 public String getCookie ( ) { returnhttpCookie; }62 public voidsetCookie ( String cookie ) {63 Map map = new HashMap();64 map.put("Cookie", cookie);65 setHeader(map);66 }67
68
69 //GET 请求
70 public String sendGet ( String url ) throwsIOException {71
72 httpUrl = newURL(url);73 httpConn =(HttpURLConnection)httpUrl.openConnection();74
75 send("GET", null);76
77 System.out.println("get ok");78 returnhttpResult;79 }80
81 //POST 请求
82 public String sendPost ( String url, Map params ) throwsIOException {83
84 httpUrl = newURL(url);85 httpConn =(HttpURLConnection)httpUrl.openConnection();86
87 send("POST", params);88
89 System.out.println("post ok");90 returnhttpResult;91 }92
93
94 private void send ( String method, Map params ) throwsIOException {95
96 httpConn.setRequestMethod(method);97
98 httpConn.setDoInput(true);99 httpConn.setDoOutput(true);100 httpConn.setConnectTimeout(5000);101
102 //判断 是否有设置 请求头
103 if ( httpHeaders != null) {104 Iterator iter =httpHeaders.keySet().iterator();105 while( iter.hasNext() ) {106 String key =iter.next();107 System.out.print("key: " +key);108 System.out.print("\t");109 System.out.println("value: " +httpHeaders.get(key));110 httpConn.setRequestProperty(key, httpHeaders.get(key));111 }112 }113
114 //判断 是否有设置请求数据
115 if ( params != null) {116 StringBuffer data = newStringBuffer();117 Iterator iter =params.keySet().iterator();118 while( iter.hasNext() ) {119 String key =iter.next();120 String value =params.get(key);121 data.append(URLEncoder.encode(key, "UTF-8"));122 data.append("=").append(123 URLEncoder.encode(value, "UTF-8"));124 data.append("&");125 }126
127 OutputStreamWriter writer = newOutputStreamWriter(httpConn.getOutputStream());128 writer.write(data.substring(0, data.length() - 1));129 writer.flush();130 writer.close();131
132 /*提交数据方式 第二种133 PrintWriter printWriter = new PrintWriter(httpConn.getOutputStream());134 printWriter.write(data.substring(0, data.length() - 1));135 printWriter.flush();136 printWriter.close();137 */
138 /*提交数据方式 第三种139 DataOutputStream dos=new DataOutputStream(httpConn.getOutputStream());140 dos.writeBytes(data.substring(0, data.length() - 1));141 dos.flush();142 dos.close();143 */
144 /*提交数据方式 第四种145 OutputStream outwritestream = httpConn.getOutputStream();146 outwritestream.write(data.substring(0, data.length() - 1).getBytes());147 outwritestream.flush();148 outwritestrean.close();149 */
150 System.out.println("data: " + data.substring(0, data.length() - 1));151 }152
153
154 //System.out.println("返回代码: " + httpConn.getResponseCode());
155 if ( httpConn.getResponseCode() == 200) {156
157 //保存 Cookie
158 httpCookie = httpConn.getHeaderField("Set-Cookie");159 if ( httpCookie == null || httpCookie.equals("") ) {160 httpCookie = httpConn.getHeaderField("Cookie");161 }162
163 //保存 网页请求头,跳过第一个 HTTP/1.1
164 Map mapHeaders = new HashMap();165 Iterator iterHeader =httpConn.getHeaderFields().keySet().iterator();166 int i = 1;167 while( iterHeader.hasNext() ) {168 String key =iterHeader.next();169 if ( i == 1 ) {continue;}170 mapHeaders.put(key, httpConn.getHeaderField(key));171 i++;172 }173 setHeader(mapHeaders);174
175 //获取网页返回值
176 BufferedReader bf = new BufferedReader(newInputStreamReader(httpConn.getInputStream()));177 String line = "";178 httpResult = "";179 while ( (line = bf.readLine()) != null) {180 httpResult += line + "\n";181 }182 bf.close();183 }184 else{185 //请求失败 则 返回网页请求代码
186 httpResult = httpConn.getResponseCode() + "";187 }188
189 httpConn.disconnect();190 }191
192
193
194 publicString test ( String msg ) {195 returnmsg;196 }197
198
199
200
201 }