Java模拟Http post、get请求

832次浏览

java模拟http请求有多种方法,今天就说一种个人认为比较简单的方法:

   /**
     * post
     * 2016-6-12 下午2:16:14  李锋镝
     * @param url POST地址
     * @param data POST数据NameValuePair[]
     * @return 响应的参数
     */
    public static String post(String url,NameValuePair[] data){
        
        String response = "";
        
        HttpClient httpClient = new HttpClient();
        PostMethod postMethod = new PostMethod(url);
        
        //设置请求编码
        postMethod.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,"GBK");
        
        postMethod.setRequestBody(data);
        
        //设置请求头header参数
        postMethod.setRequestHeader("userId","57601095");
        postMethod.setRequestHeader("userSession","57601095");
        postMethod.setRequestHeader("cityid","31000");
        
        int statusCode = 0;
        
        try {
            statusCode = httpClient.executeMethod(postMethod);
        } catch (HttpException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        //301、302重定向
        if(statusCode == HttpStatus.SC_MOVED_PERMANENTLY || statusCode == HttpStatus.SC_MOVED_TEMPORARILY){
            Header locationHeader = postMethod.getResponseHeader("location"); 
            String location = null; 
            if (locationHeader != null) { 
                location = locationHeader.getValue(); 
                System.out.println("重定向跳转页面:" + location); 
                response= post(location,data);//用跳转后的页面重新请求。 
            } else { 
                System.err.println("location is null."); 
            }
        }else { 
            System.out.println(postMethod.getStatusLine()); 
            try { 
                byte[] b=postMethod.getResponseBody();
                response = new String(b,"GBK");
            } catch (IOException e) { 
                e.printStackTrace(); 
            } 
            postMethod.releaseConnection(); 
        }
        
        System.out.println("POST响应参数:"+response);
        
        return response;
    }
    
    /**
     * get方式
     * 2016-6-12 下午2:38:45  李锋镝
     * @param url
     * @return
     */
    public static String get(String url){
        
        String response = "";
        
        HttpClient httpClient = new HttpClient();
        GetMethod getMethod = new GetMethod(url);
        
        getMethod.setRequestHeader("userId","56166702");
        getMethod.setRequestHeader("userSession","56166702");
        getMethod.setRequestHeader("cityid","31000");
        
        int statusCode = 0;
        
        try {
            statusCode = httpClient.executeMethod(getMethod);
        } catch (HttpException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        //301、302重定向
        if(statusCode == HttpStatus.SC_MOVED_PERMANENTLY || statusCode == HttpStatus.SC_MOVED_TEMPORARILY){
            Header locationHeader = getMethod.getResponseHeader("location"); 
            String location = null; 
            if (locationHeader != null) { 
                location = locationHeader.getValue(); 
                System.out.println("重定向跳转页面:" + location); 
                response= get(location);//用跳转后的页面重新请求。 
            } else { 
                System.err.println("location is null."); 
            }
        }else { 
            System.out.println(getMethod.getStatusLine()); 
            try { 
                byte[] b=getMethod.getResponseBody();
                response = new String(b,"GBK");
            } catch (IOException e) { 
                e.printStackTrace(); 
            } 
            getMethod.releaseConnection(); 
        }
        
        System.out.println("GET响应参数:"+response);
        
        return response;
    }

对于post请求,我们需要根据对应接口的编码设置请求编码,防止中文乱码。请求需要的参数则放在NameValuePair数组中,NameValuePair用法如下:

NameValuePair page = new NameValuePair("page", "1");
NameValuePair pageCount = new NameValuePair("pageCount", "10");
NameValuePair state = new NameValuePair("state", "1");
NameValuePair[] data = {page,pageCount,state};


而get请求,则不需要改变编码,默认的ISO-8859-1编码,一般后台会根据这个处理中文,请求的时候只需要写好请求的url即可。


Tags: Java

上一篇: Oracle递归查询
如果您觉得本文对您的学习或工作有所帮助,您可以打开支付宝,对我的博客进行赞助:
我的支付宝
如果您觉得仍有疑问 OR 发现我的博客中有不正确或侵权的内容,您可以打开手机QQ扫描下面的二维码,联系我本人(备注请注明来自博客):
我的QQ