httpclient 3.1和4.1 请求的区别

By | 02月17日
Advertisement

Httpclient 3.1和httpclient 4.1 在post请求中的不同。
下面的示例将httpclient请求模拟webservices请求。

3.1 包名:commons-httpclient-3.1.jar

  public static EnvelopeDocument call(String soapString, String endpoint, int timeout)
        throws SOAException
    {
        EnvelopeDocument resDoc = null;
        PostMethod post = null;
        HttpClient httpclient = new HttpClient();
        try
        {
            HttpClientParams params = new HttpClientParams();
            params.setSoTimeout(timeout * 1000);
            httpclient.setParams(params);
            post = new PostMethod(endpoint);
            org.apache.commons.httpclient.methods.RequestEntity entity = new StringRequestEntity(soapString, "text/xml", "UTF-8");
            post.setRequestEntity(entity);
            int result = httpclient.executeMethod(post);
            String res;
            if(result != 200)
            {
                res = post.getResponseBodyAsString();
                throw new SOAException(ErrorCode.CALL_WEB_SERVICE_ERROR, "Web Service Server returns HTTP code " + result + "\n" + res);
            }
            res = post.getResponseBodyAsString();
            try
            {
                resDoc = org.xmlsoap.schemas.soap.envelope.EnvelopeDocument.Factory.parse(res);
            }
            catch(XmlException xe)
            {
                throw new SOAException(ErrorCode.PARSE_RESPONSE_XML_ERROR, "Parsing web service response soap message error", xe);
            }
        }
        catch(SOAException e)
        {
            e.printStackTrace();
            throw e;
        }
        catch(Exception e)
        {
            e.printStackTrace();
            throw new SOAException(ErrorCode.CALL_WEB_SERVICE_ERROR, "call web service error" + e.getMessage(), e);
        }
        return resDoc;
    }

4.1 包名:httpclient-4.1.jar

public static String requestWebservice(String url, String xmlParam)
            throws ClientProtocolException, IOException {
        Validate.notNull(url, "请求url");
        Validate.notNull(xmlParam, "符合webservice标准的xml字符串");

        String responseContent = "";

        HttpClient httpClient = new DefaultHttpClient();
        byte[] b = xmlParam.getBytes("utf-8");
        HttpPost httpPost = new HttpPost(url);
        if (url.indexOf("RushRepairService") != -1) {
            b = xmlParam.getBytes("GBK");
        }
        InputStream is = new ByteArrayInputStream(b, 0, b.length);
        HttpEntity re = new InputStreamEntity(is, b.length);
        httpPost.setEntity(re);

        HttpResponse response = httpClient.execute(httpPost);

        if (200 != response.getStatusLine().getStatusCode()) {
            throw new RuntimeException("http返回状态"
                    + response.getStatusLine().getStatusCode());
        }

        HttpEntity entity = response.getEntity();

        String inputLine = "";
        InputStreamReader in = new InputStreamReader(entity.getContent());
        BufferedReader reader = new BufferedReader(in);
        while ((inputLine = reader.readLine()) != null) {
            responseContent += inputLine;
        }
        reader.close();

        httpClient.getConnectionManager().shutdown();
        return responseContent;
    }

如有任何疑问可扫码头像关注公众号!

Similar Posts:

  • servlet开发三种,get请求和post请求的区别

    开发servlet三种方法 1.实现servlet接口 2.继承GenericServlet 3.继承HttpServlet 需求如下 请使用实现接口的方式,来开发一个Servelt,要求该Servlet可以显示hello,同时显示当前时间 步骤: 1.建立一个WEB应用web1 2.在web1下建立WEB-INF/web.xml (从ROOTWEB-INF/web.xml 下复制) 3.在WEB-INF下创建classes lib目录 4.在WEB-INF/classes/创建一个servle

  • 使用HttpClient向web api发异步请求

    线程池的请求方式 最近把项目升级实现异步编程,没一个成熟的项目,都要演变好几个版本才能趋于稳定.在 Web 服务器上,.NET Framework 维护一个用于服务 ASP.NET 请求的线程池. 当请求到达时,将调度池中的线程以处理该请求. 如果对请求进行同步处理,则在处理请求时将阻塞处理请求的线程,并且该线程不能对另一个请求提供服务.这可能不是一个问题,因为线程池可以设置得足够大以容纳许多阻塞的线程. 但是,线程池中的线程数目是有限制的. 在同时处理多个长时间运行的请求的大型应用程序中,可能

  • 使用HttpClient向服务器发送restful post请求

    直接上代码: public class RestClient { public static void main(String[] args) { String url = "http://ip地址/api/User/GetToken"; HttpClient client = new HttpClient(); //POST方法 PostMethod method = new PostMethod(url); //传递参数 NameValuePair[] data = { new N

  • get与post请求的区别(AJAX)

    参考文献: 1. 百度经验:http://jingyan.baidu.com/article/d3b74d64abbd6b1f76e60947.html 2.jQuery AJAX 的get.post使用区别:http://www.jb51.net/article/43196.htm POST请求会多出 From Data,GET请求只在url里传输数据 POST实例代码index.html: 1 <!DOCTYPE html> 2 <html lang="zh-cn"

  • get 和post 请求的区别

    表单提交中GET 和POST 方式的区别主要有以下5点: (1).GTE 用于向服务器请求请求,POST 用于向服务器传送数据 (2).GET 把参数数据队列加到提交表单的ACTION属性所指的url,值和字段一一对应,url可以看到:POST通过HTTPpost机制,将表单内各字段和内容放在HTML的HEADER内一起传送给ACTION属性所指的url中,用户看不到这个过程. (3).对于GET 方式,服务器用request.querystring 获取变量的值,对于POST方式,服务器用re

  • java综合 Get和Post请求的区别分析

    1. get 是从服务器上获取数据,post 是向服务器传送数据. get 请求返回 request - URI 所指出的任意信息. Post 请求用来发送电子邮件.新闻或发送能由交互用户填写的表格.这是唯一需要在请求中发送body的请求.使用Post请求时需要在报文首部 Content - Length 字段中指出body的长度. 2. get 是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到.post是通过HTTP post机制,将

  • Ajax请求和同步请求如何区别

    我们如何在后台判断是ajax请求还是同步请求 在HttpServletRequest 中一个属性x-requested-with 如果为ajax请求它是有值的,值为XMLHttpRequest ,如果是同步请求则它的值为null String ask=request.getHeader("x-requested-with"); ask 为XMLHttpRequest ajax 请求.为null 为同步请求 

  • 【网络】Get 请求与 Post 请求的区别

    GET和POST的区别 1.GET提交,请求的数据会附在URL之后(就是把数据放置在HTTP协议头<request-line>中),以?分割URL和传输数据,多个参数用&连接;例如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD.如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%

  • post和get请求的区别

    表单提交中get和post方式的区别有5点 1.get是从服务器上获取数据,post是向服务器传送数据. 2.get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到.post是通过HTTPpost机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址.用户看不到这个过程. 3.对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Requ

  • ajax中get与post请求的区别

    一.get()和post()基本区别 1.get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到.post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址.用户看不到这个过程. 2.对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据.两种方式的参数都可以用Reques

Tags: