packagecom.m_gecko.util;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.OutputStream;importjava.io.OutputStreamWriter;importjava.io.PrintWriter;importjava.io.UnsupportedEncodingException;importjava.net.ConnectException;importjava.net.HttpURLConnection;importjava.net.MalformedURLException;importjava.net.URL;importjava.net.URLEncoder;importjava.util.List;importjava.util.Map;importjavax.net.ssl.HttpsURLConnection;importjavax.net.ssl.SSLContext;importjavax.net.ssl.SSLSocketFactory;importjavax.net.ssl.TrustManager;importorg.apache.commons.io.IOUtils;public classHttpUtil {/*** 模拟http的get请求,获取响应(输入流),然后把输入流转为
*
*@paramurl
*@return
*/
public staticString httpGet(String url) {
HttpURLConnection connection= null;
InputStream response= null;try{
connection= (HttpURLConnection) newURL(url).openConnection();
connection.setConnectTimeout(10000);
connection.setReadTimeout(10000);
response=connection.getInputStream();if (response != null) {
String nextLine= IOUtils.toString(response, "utf-8");returnnextLine;
}
}catch(MalformedURLException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}finally{if (response != null)try{
response.close();
}catch(IOException e) {
e.printStackTrace();
}if (connection != null) {
connection.disconnect();
connection= null;
}
}return null;
}/*** 模拟http的post请求,类似上面
*
*@paramurl
*@return
*/
public staticString httpPost(String url) {
HttpURLConnection connection= null;
InputStream response= null;try{
connection= (HttpURLConnection) newURL(url).openConnection();
connection.setConnectTimeout(30000);
connection.setReadTimeout(30000);//发送POST请求必须设置如下两行
connection.setDoOutput(true);
connection.setDoInput(true);
response=connection.getInputStream();if (response != null) {
String nextLine= IOUtils.toString(response, "utf-8");returnnextLine;
}
}catch(MalformedURLException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}finally{if (response != null)try{
response.close();
}catch(IOException e) {
e.printStackTrace();
}if (connection != null) {
connection.disconnect();
connection= null;
}
}return null;
}/*** 向指定URL发送GET方法的请求
*
*@paramurl
* 发送请求的URL
*@paramparam
* 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
*@returnURL 所代表远程资源的响应结果*/
public staticString sendGet(String url, String param) {
String result= "";
BufferedReader in= null;try{
String urlNameString= url + "?" +param;
URL realUrl= newURL(urlNameString);//打开和URL之间的连接
HttpURLConnection connection =(HttpURLConnection) realUrl
.openConnection();//设置通用的请求属性
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");//建立实际的连接
connection.connect();//获取所有响应头字段
Map> map =connection.getHeaderFields();//遍历所有的响应头字段//for (String key : map.keySet()) {//System.out.println(key + "--->" + map.get(key));//}//定义 BufferedReader输入流来读取URL的响应
in = new BufferedReader(newInputStreamReader(
connection.getInputStream(),"utf-8"));
String line;while ((line = in.readLine()) != null) {
result+=line;
}
}catch(Exception e) {
System.out.println("发送GET请求出现异常!" +e);
e.printStackTrace();
}//使用finally块来关闭输入流
finally{try{if (in != null) {
in.close();
}
}catch(Exception e2) {
e2.printStackTrace();
}
}returnresult;
}/*** 向指定 URL 发送POST方法的请求
*
*@paramurl
* 发送请求的 URL
*@paramparam
* 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
*@return所代表远程资源的响应结果*/
public staticString sendPost(String url, String param) {
PrintWriter out= null;
BufferedReader in= null;
String result= "";try{
URL realUrl= newURL(url);//打开和URL之间的连接
HttpURLConnection conn =(HttpURLConnection) realUrl
.openConnection();//设置通用的请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");//发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);//获取URLConnection对象对应的输出流//out = new PrintWriter(conn.getOutputStream());// //发送请求参数//out.print(param);// //flush输出流的缓冲//out.flush();//定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(newInputStreamReader(
conn.getInputStream(),"utf-8"));
String line;while ((line = in.readLine()) != null) {
result+=line;
}
}catch(Exception e) {
System.out.println("发送 POST 请求出现异常!" +e);
e.printStackTrace();
}//使用finally块来关闭输出流、输入流
finally{try{if (out != null) {
out.close();
}if (in != null) {
in.close();
}
}catch(IOException ex) {
ex.printStackTrace();
}
}returnresult;
}/*** 向指定 URL 发送POST方法的请求
*
*@paramurl
* 发送请求的 URL
*@paramparams
* 请求的参数集合
*@return远程资源的响应结果*/
public static String sendPost(String url, Mapparams) {
OutputStreamWriter out= null;
BufferedReader in= null;
StringBuilder result= newStringBuilder();try{
URL realUrl= newURL(url);
HttpURLConnection conn=(HttpURLConnection) realUrl
.openConnection();//发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);//POST方法
conn.setRequestMethod("POST");//设置通用的请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
conn.connect();//获取URLConnection对象对应的输出流
out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");//发送请求参数
if (params != null) {
StringBuilder param= newStringBuilder();for (Map.Entryentry : params.entrySet()) {if (param.length() > 0) {
param.append("&");
}
param.append(entry.getKey());
param.append("=");
param.append(entry.getValue());//System.out.println(entry.getKey()+":"+entry.getValue());
}
System.out.println("param:" +param.toString());
out.write(param.toString());
}//flush输出流的缓冲
out.flush();//定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(newInputStreamReader(
conn.getInputStream(),"UTF-8"));
String line;while ((line = in.readLine()) != null) {
result.append(line);
}
}catch(Exception e) {
e.printStackTrace();
}//使用finally块来关闭输出流、输入流
finally{try{if (out != null) {
out.close();
}if (in != null) {
in.close();
}
}catch(IOException ex) {
ex.printStackTrace();
}
}returnresult.toString();
}/*** url编码
*
*@paramstr
*@paramcharset
*@return*@throwsUnsupportedEncodingException*/
public staticString urlEncoder(String str, String charset)throwsUnsupportedEncodingException {if (str == null) {
str= "";
}
String result=URLEncoder.encode(str, charset);returnresult;
}/*** 发送https请求
*
*@paramrequestUrl
* 请求地址
*@paramrequestMethod
* 请求方式(GET、POST)
*@paramoutputStr
* 提交的数据
*@return返回微信服务器响应的信息*/
public staticString httpsRequest(String requestUrl, String requestMethod,
String outputStr) {try{//创建SSLContext对象,并使用我们指定的信任管理器初始化
TrustManager[] tm = { newMyX509TrustManager() };
SSLContext sslContext= SSLContext.getInstance("SSL", "SunJSSE");
sslContext.init(null, tm, newjava.security.SecureRandom());//从上述SSLContext对象中得到SSLSocketFactory对象
SSLSocketFactory ssf =sslContext.getSocketFactory();
URL url= newURL(requestUrl);
HttpsURLConnection conn=(HttpsURLConnection) url.openConnection();
conn.setSSLSocketFactory(ssf);
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);//设置请求方式(GET/POST)
conn.setRequestMethod(requestMethod);
conn.setRequestProperty("content-type","application/x-www-form-urlencoded");//当outputStr不为null时向输出流写数据
if (null !=outputStr) {
OutputStream outputStream=conn.getOutputStream();//注意编码格式
outputStream.write(outputStr.getBytes("UTF-8"));
outputStream.close();
}//从输入流读取返回内容
InputStream inputStream =conn.getInputStream();
InputStreamReader inputStreamReader= newInputStreamReader(
inputStream,"utf-8");
BufferedReader bufferedReader= newBufferedReader(
inputStreamReader);
String str= null;
StringBuffer buffer= newStringBuffer();while ((str = bufferedReader.readLine()) != null) {
buffer.append(str);
}//释放资源
bufferedReader.close();
inputStreamReader.close();
inputStream.close();
inputStream= null;
conn.disconnect();returnbuffer.toString();
}catch(ConnectException ce) {
ce.printStackTrace();
}catch(Exception e) {
e.printStackTrace();
}return null;
}
}