package ssh.util;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.Iterator;
import java.util.Map;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
/**
* URL工具
* @author gary
*
*/
public class URLUtil {
/**
* 对url进行编码
*/
public static String encodeURL(String url) {
try {
return URLEncoder.encode(url, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return null;
}
}
/**
* 对url进行解码
* @param url
* @return
*/
public static String decodeURL(String url){
try {
return URLDecoder.decode(url, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return null;
}
}
/**
* 判断URL地址是否存在
* @param url
* @return
*/
public static boolean isURLExist(String url) {
try {
URL u = new URL(url);
HttpURLConnection urlconn = (HttpURLConnection) u.openConnection();
int state = urlconn.getResponseCode();
if (state == 200) {
return true;
} else {
return false;
}
} catch (Exception e) {
return false;
}
}
/**
* 将请求参数还原为key=value的形式,for struts2
* @param params
* @return
*/
public static String getParamString(Map<?, ?> params) {
StringBuffer queryString = new StringBuffer(256);
Iterator<?> it = params.keySet().iterator();
int count = 0;
while (it.hasNext()) {
String key = (String) it.next();
String[] param = (String[]) params.get(key);
for (int i = 0; i < param.length; i++) {
if (count == 0) {
count++;
} else {
queryString.append("&");
}
queryString.append(key);
queryString.append("=");
try {
queryString.append(URLEncoder.encode((String) param[i], "UTF-8"));
} catch (UnsupportedEncodingException e) {
}
}
}
return queryString.toString();
}
/**
* 获得请求的路径及参数
* @param request
* @return
*/
public static String getRequestURL(HttpServletRequest request) {
StringBuffer originalURL = new StringBuffer(request.getServletPath());
Map<?,?> parameters = request.getParameterMap();
if (parameters != null && parameters.size() > 0) {
originalURL.append("?");
originalURL.append(getParamString(parameters));
}
return originalURL.toString();
}
/**
* 抓取网页内容,自动识别编码
* @param urlString
* @return
*/
public static String url2Str(String urlString) {
try {
StringBuffer html = new StringBuffer();
URL url = new URL(urlString);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
URLConnection c = url.openConnection();
c.connect();
String contentType = c.getContentType();
String characterEncoding = null;
int index = contentType.indexOf("charset=");
if(index == -1){
characterEncoding = "UTF-8";
}else{
characterEncoding = contentType.substring(index + 8, contentType.length());
}
InputStreamReader isr = new InputStreamReader(conn.getInputStream(), characterEncoding);
BufferedReader br = new BufferedReader(isr);
String temp;
while ((temp = br.readLine()) != null) {
html.append(temp).append("\n");
}
br.close();
isr.close();
return html.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 保存图片到本地
* @param picUrl
* 图片URL地址
* @param newFileName
* 保存文件名
* @param dir
* 保存目录
* @return
*/
public static void savePic(String picUrl, String newFileName, String dir){
try{
URL url = new URL(picUrl);
InputStream in = url.openStream();
BufferedImage srcImage = ImageIO.read(url.openStream());
File img = new File(dir + newFileName);
ImageIO.write(srcImage, "jpg", img);
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String content = URLUtil.url2Str("http://www.baidu.com");;
System.out.println(content);
}
}