HttpURLConnUtil

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");
 }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

涂作权的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值