Java进行http请求连接

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
 
public class HttpRequests {
    /**
     * 是否打印调试信息
     * */
    private static boolean _isDebug=false;
     
    /**
     * 单例
     * **/
    private HttpRequests(){ }
     
    /**
     * @param is(boolean) 设置是否打印调试信息
     * **/
    public static boolean setDebug(boolean is){
        _isDebug=is;
        return _isDebug;
    }
 
    /**
     * @param is(boolean) 设置是否打印调试信息
     * **/
    public static boolean getDebug(){
        return _isDebug;
    }
    /**
     * @param url(String) have no header
     * **/
    public static String get(String url){
        String result="";
        Map m=new HashMap();
        result=get(url,m);
        return result;
    }
     
 
     
    /**
     * @param host  input host(String)
     * @param path input path(String)
     * @param parameter input paramter(Map)
     * @param header input header(Map)
     * **/
    public static String get(String host,String path,Map parameter,Map header){
        String result="";
        String url=getURL(host,path,parameter);
        result=get(url,header);
        return result;
    }
     
    /***
     * @param url(String)  url
     * @param header(String[]) 必须是一个key后面接一个value,否则肯定会不准
     * @param header的例子:
     * @param get(url,"Cookies","a=b;c=d","User-Agent","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)"
     * @param 必须是以上的类似的那种格式才可以,要不然会出错的~
     * */
    public static String get(String url,String ... header){
        String result="";
        Map<String,String> he=new HashMap();
        for(int i=0;i<header.length;i+=2){
            he.put(header[i-1], header[i]);
        }
        result=get(url,he);
        return result;
    }
    /***
     * @param url(String)  url
     * @param header(Map) 头和cookies
     * */
    public static String get(String url,Map header){
    //program begining~
        Date pb=new Date();
        String result=null;    
        //创建URL对象
        try {
            URL des=new URL(url);
            HttpURLConnection con=(HttpURLConnection)des.openConnection();
             
            //写入头信息
            if(header!=null)    {              
                Iterator hi=header.entrySet().iterator();
                while(hi.hasNext()){
                    Map.Entry he=(Entry)hi.next();
                    if(_isDebug){
                        System.out.println("header\t:\t"+he.getKey()+"\t:\t"+he.getValue());
                    }
                    con.setRequestProperty((String)he.getKey(),(String)he.getValue());                 
                }              
                }
            //准备连接
            Date rb=new Date();
            con.connect();
            System.out.println(con.getResponseCode()
                    +"/n"+con.getResponseMessage());
            //已连接成功
            Date rg=new Date();
             
            //打印返回头    
            if(_isDebug){
            Map resheader=con.getHeaderFields();
            Iterator rh=resheader.entrySet().iterator();
            while(rh.hasNext()){
                Map.Entry rhi=(Entry)rh.next();
                System.out.println("Response Header\t:\t"+rhi.getKey()+"\t:\t"+rhi.getValue());
            }          
            }
             
            //返回response的字符串
            BufferedReader reader=new BufferedReader(new InputStreamReader(con.getInputStream(),"utf-8"));
            String line="";
            StringBuffer buf=new StringBuffer();
            while((line=reader.readLine())!=null){
                buf.append(line);
            }
            //关闭读取流,关闭连接
            reader.close();
            con.disconnect();
            Date pd=new Date();
            if(_isDebug){
                System.out.println("接口耗时\t:\t"+(rg.getTime()-rb.getTime())+"\tms");
                System.out.println("程序耗时\t:\t"+(pd.getTime()-pb.getTime())+"\tms");
            }          
            result=buf.toString();
             
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            System.out.println("创建url对象报错~");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }  
         
        return result;
         
    }
     
    /**
     * @param host(String) host
     * @param path(path) path
     * @param parameter(Map) 参数
     * **/
    public static String getURL(String host,String path,Map parameter){
        String url="http://"+host+path;
        if(_isDebug)
            System.out.println("url\t+\tpath\t=\t"+url);
        //处理parameter
        StringBuffer pa=new StringBuffer();
        if(parameter!=null){
            Iterator pi=parameter.entrySet().iterator();
            while(pi.hasNext()){
                Map.Entry me=(Entry)pi.next();
                pa.append(me.getKey()+"="+me.getValue()+"&");
            }
            pa.setLength(pa.length()-1);
            if(_isDebug)
                System.out.println("parameter\t=\t"+pa.toString());
        }
        url+=pa.toString();
        return url;
    }
     
     
    /**
     * @param type
     * 分类一
     * @param length
     * **/
    public static String RandString(int type,int length){
        StringBuffer buffer=null;
        StringBuffer sb=null;
         
        return sb.toString();
    }
    /**
     * @param asciicode(String) 把这个字符串中的uincode转换成utf-8的字符串
     * **/
     public static String unicode2String(String asciicode) {
           
          String[] asciis = asciicode.split("\\\\u");
          String nativeValue = asciis[0];
          try {
              for (int i = 1; i < asciis.length; i++) {
                  String code = asciis[i];
                  nativeValue += (char) Integer.parseInt(code.substring(0, 4), 16);
                  if (code.length() > 4) {
                      nativeValue += code.substring(4, code.length());
                  }
              }
          } catch (NumberFormatException e) {
              return asciicode;
          }
          return nativeValue;
     }
      
     /**
      * 暂时先不重构post,感觉工作量很大的样子
      * @param url(String) url不用说了
      * @param parameter(Map(String,String) 请求参数
      * @param header(Map(String,String) 请求参数
      * **/
        public static String post(String url,Map<String,String> parameter,Map<String,String> headers){
            String response="";
            try {
                URL des=new URL(url);
                HttpURLConnection con=(HttpURLConnection)des.openConnection();
                if(headers!=null)
                    for(Map.Entry<String,String> map:headers.entrySet()){
                        con.setRequestProperty(map.getKey(),map.getValue());
                    }
                // 设置是否向connection输出,因为这个是post请求,参数要放在 
                // http正文内,因此需要设为true
                con.setDoOutput(true);
                // Read from the connection. Default is true.
                con.setDoInput(true);
                // Set the post method. Default is GET
                con.setRequestMethod("POST");
                // Post 请求不能使用缓存
                con.setUseCaches(false);
                // URLConnection.setFollowRedirects是static函数,作用于所有的URLConnection对象。 
                // connection.setFollowRedirects(true); 
                con.setInstanceFollowRedirects(true);
                // URLConnection.setInstanceFollowRedirects是成员函数,仅作用于当前函数 
                // 配置本次连接的Content-type,配置为application/x-www-form-urlencoded的 
                // 意思是正文是urlencoded编码过的form参数,下面我们可以看到我们对正文内容使用URLEncoder.encode 
                // 进行编码 
                con.setRequestProperty("Content-Type", 
                        "application/x-www-form-urlencoded");
                con.connect();
                DataOutputStream out=new DataOutputStream(con.getOutputStream());
                String content="";
                int i=0;
                for(Map.Entry<String,String> map:parameter.entrySet()){
                    if(i!=0)
                    content+="&"+map.getKey()+"="+map.getValue();
                    else content+=map.getKey()+"="+map.getValue();
                    ++i;
                }
                content=URLEncoder.encode(content,"utf-8");
                out.writeBytes(content);
                out.flush();
                out.close();
                BufferedReader reader=new BufferedReader(new InputStreamReader(con.getInputStream(),"utf-8"));
                String line="";
                StringBuffer buf=new StringBuffer();
                while((line=reader.readLine())!=null){
                    buf.append(line);
                }
                response=buf.toString();
                reader.close();
                con.disconnect();
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
             
            return response;
        }
 
 
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值