package com.css.common.util;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Locale;
import java.util.Random;
/**
* 用于HTTP连接处理的工具类
*
* @version 1.0
*
*/
public class HttpURLConnUtil {
/**
* 默认的HttpURLConnection访问连接次数
*/
private static int DEFAULT_TRY_COUNT = 3;
/**
* 默认的StreamReader读写字符编码
*/
private static String DEFAULT_READER_ENCODE = "UTF-8";
/**
* 默认的URLEncode字符编码
*/
private static String DEFAULT_URL_ENCODE = "UTF-8";
/**
* 默认的指定特殊关键字
*/
private static String KEYWORD = "json=";
public static String[] UserAgent = new String[] {
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322)",
"Baiduspider",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)",
"Googlebot" };
/**
* 得到HTML源码
* @param s_url 访问路径
* @return HTML源码
* @throws Exception
*/
public static String getHTML(String s_url) throws Exception {
return getHTML(s_url, DEFAULT_READER_ENCODE , DEFAULT_TRY_COUNT , KEYWORD , DEFAULT_URL_ENCODE);
}
/**
* 得到HTML源码
* @param s_url 访问路径
* @param s_type 编码类型
* @return HTML源码
* @throws Exception
*/
public static String getHTML(String s_url, String s_type) throws Exception {
return getHTML(s_url,s_type,DEFAULT_TRY_COUNT,KEYWORD,DEFAULT_URL_ENCODE);
}
/**
* 得到HTML源码
* @param s_url 访问路径
* @param try_count 访问连接次数
* @return HTML源码
* @throws Exception
*/
public static String getHTML(String s_url, int try_count) throws Exception {
return getHTML(s_url,DEFAULT_READER_ENCODE,try_count,KEYWORD,DEFAULT_URL_ENCODE);
}
/**
* 得到HTML源码
* @param s_url 访问路径
* @param s_type 编码类型
* @param try_count 访问连接次数
* @param charStr 指定特殊关键字
* @param enc 设置字符串中指定特殊字符之后的字符编码(默认UTF-8)
* @return
* @throws Exception
*/
public static String getHTML(String s_url, String s_type, int try_count,String charStr,String enc) throws Exception {
s_url = setUrlEncode(s_url,charStr,enc);
return getHTML(s_url,s_type,try_count,Locale.getDefault().toString());
}
/**
* 得到HTML源码
* @param s_url 访问路径
* @param charStr 指定特殊关键字
* @param enc 设置字符串中指定特殊字符之后的字符编码
* @return
* @throws Exception
*/
public static String getHTML(String s_url,String charStr,String enc) throws Exception {
s_url = setUrlEncode(s_url,charStr,enc);
return getHTML(s_url,DEFAULT_READER_ENCODE,DEFAULT_TRY_COUNT,Locale.getDefault().toString());
}
/**
* 得到HTML源码
* @param s_url 访问路径
* @param language 指定的连接语言
* @return
* @throws Exception
*/
public static String getHTMLL(String s_url,String language) throws Exception{
s_url = setUrlEncode(s_url,KEYWORD,DEFAULT_URL_ENCODE);
return getHTML(s_url,DEFAULT_READER_ENCODE,DEFAULT_TRY_COUNT,language);
}
/**
* 得到HTML源码
* @param s_url 访问路径
* @param charStr 指定特殊关键字
* @param enc 设置字符串中指定特殊字符之后的字符编码
* @param language 指定的连接语言
* @return
* @throws Exception
*/
public static String getHTMLL(String s_url,String charStr,String enc,String language) throws Exception{
s_url = setUrlEncode(s_url,charStr,enc);
return getHTML(s_url,DEFAULT_READER_ENCODE,DEFAULT_TRY_COUNT,language);
}
/**
* 得到HTML源码
* @param s_url 访问路径
* @param s_type 编码类型
* @param try_count 访问连接次数
* @return
* @throws Exception
*/
public static String getHTML(String s_url, String s_type, int try_count,String language) throws Exception {
HttpURLConnection url_con = null;
String responseContent = null;
try{
StringBuffer params = new StringBuffer();
String queryUrl = s_url;
int paramIndex = s_url.indexOf("?");
if (paramIndex > 0){
queryUrl = s_url.substring(0, paramIndex);
String parameters = s_url.substring(paramIndex + 1, s_url.length());
String[] paramArray = parameters.split("&");
for (int i = 0; i < paramArray.length; i++){
String string = paramArray[i];
int index = string.indexOf("=");
if (index > 0){
String parameter = string.substring(0, index);
String value = string.substring(index + 1, string.length());
params.append(parameter);
params.append("=");
params.append(value);
params.append("&");
}
}
params = params.deleteCharAt(params.length() - 1);
}
URL url = new URL(queryUrl);
url_con = (HttpURLConnection) url.openConnection();
Random r = new Random();
url_con.setRequestMethod("POST");//POST方式提交
url_con.setDoOutput(true);
url_con.setDoInput(true);
url_con.setRequestProperty("User-agent", UserAgent[r.nextInt(UserAgent.length)]);
url_con.setRequestProperty("accept-language", language);
byte[] b = params.toString().getBytes();
url_con.getOutputStream().write(b, 0, b.length);
url_con.getOutputStream().flush();
url_con.getOutputStream().close();
InputStream in = url_con.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(in,s_type));
String tempLine = rd.readLine();
StringBuffer temp = new StringBuffer();
String crlf=System.getProperty("line.separator");
while (tempLine != null){
temp.append(tempLine);
temp.append(crlf);
tempLine = rd.readLine();
}
responseContent = temp.toString();
rd.close();
in.close();
}catch (IOException e){
if (try_count == 0){
throw new Exception(e.getMessage() + ":" + s_url);
} else {
try_count--;
System.out.println("连接失败,还可尝试" + try_count + "次连接...");
return getHTML(s_url,s_type,try_count,language);
}
}finally{
if (url_con != null){
url_con.disconnect();
}
}
return responseContent;
}
/**
* 设置字符串中指定特殊字符之后的字符编码
* @param s_url 原字符串
* @param charstr 指定特殊字符
* @param enc 指定字符编码格式
* @return
*/
public static String setUrlEncode(String s_url,String charstr,String enc) throws Exception {
int i_json = s_url.indexOf(charstr);
if(i_json>0){
String s_url_1 = s_url.substring(0, i_json+charstr.length());
//System.out.println("s_url_1 = "+s_url_1);
String s_url_2 = URLEncoder.encode(s_url.substring(i_json+charstr.length()),enc);
//System.out.println("s_url_2 = "+s_url_2);
s_url = s_url_1 +s_url_2;
//System.out.println("s_url = "+s_url);
}
return s_url;
}
/**
* 替换文件中敏感字符
* @param s 如:||,:,*,?,<>,|,]等
* @return
*/
public static String ReplaceFileName(String s) {
s = s.replaceAll("[\\\\/:\\*\\?\"<>|]", " ");
return s;
}
/**
* 替换空格
* @param s 字符串
* @return
*/
public static String ReplaceSpecial(String s) {
for (int i = 0; i <= 8; i++)
s = s.replaceAll("" + (char) i, " ");
s = s.replaceAll("" + (char) 11, " ");
s = s.replaceAll("" + (char) 12, " ");
for (int i = 14; i <= 31; i++)
s = s.replaceAll("" + (char) i, " ");
return s;
}
public static void main(String[] args) throws Exception {
String url = "http://localhost:8080/chinafung_sso/passport/list?json={memberName:'好副食店栽要'}";
long start = System.currentTimeMillis();
String html = getHTML(url);
System.out.println(html);
System.out.println(System.currentTimeMillis() - start + "ms");
}
}