zoukankan      html  css  js  c++  java
  • HTTPClient模块的HttpGet和HttpPost

        Android SDK集成了Apache HttpClient模块。要注意的是,这里的Apache HttpClient模块是HttpClient 4.0(org.apache.http.*),而不是常见的Jakarta Commons HttpClient 3.x(org.apache.commons.httpclient.*)。

               HttpClient常用HttpGet和HttpPost这两个类,分别对应Get方式和Post方式。

               无论是使用HttpGet,还是使用HttpPost,都必须通过如下3步来访问HTTP资源。

               1.创建HttpGet或HttpPost对象,将要请求的URL通过构造方法传入HttpGet或HttpPost对象。

               2.使用DefaultHttpClient类的execute方法发送HTTP GET或HTTP POST请求,并返回HttpResponse对象。

               3.通过HttpResponse接口的getEntity方法返回响应信息,并进行相应的处理。

               如果使用HttpPost方法提交HTTP POST请求,则需要使用HttpPost类的setEntity方法设置请求参数。参数则必须用NameValuePair[]数组存储。

               

               HttpGet

    [java] view plain copy
     
    1.  public String doGet()  
    2.     {  
    3.         String uriAPI = "http://XXXXX?str=I+am+get+String";  
    4.         String result= "";  
    5. //      HttpGet httpRequst = new HttpGet(URI uri);  
    6. //      HttpGet httpRequst = new HttpGet(String uri);  
    7. //      创建HttpGet或HttpPost对象,将要请求的URL通过构造方法传入HttpGet或HttpPost对象。  
    8.         HttpGet httpRequst = new HttpGet(uriAPI);  
    9.   
    10. //      new DefaultHttpClient().execute(HttpUriRequst requst);  
    11.         try {  
    12.    //使用DefaultHttpClient类的execute方法发送HTTP GET请求,并返回HttpResponse对象。  
    13.             HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequst);//其中HttpGet是HttpUriRequst的子类  
    14.             if(httpResponse.getStatusLine().getStatusCode() == 200)  
    15.             {  
    16.                 HttpEntity httpEntity = httpResponse.getEntity();  
    17.                 result = EntityUtils.toString(httpEntity);//取出应答字符串  
    18.             // 一般来说都要删除多余的字符   
    19.                 result.replaceAll(" ", "");//去掉返回结果中的" "字符,否则会在结果字符串后面显示一个小方格    
    20.             }  
    21.                    else   
    22.                         httpRequst.abort();  
    23.            } catch (ClientProtocolException e) {  
    24.             // TODO Auto-generated catch block  
    25.             e.printStackTrace();  
    26.             result = e.getMessage().toString();  
    27.         } catch (IOException e) {  
    28.             // TODO Auto-generated catch block  
    29.             e.printStackTrace();  
    30.             result = e.getMessage().toString();  
    31.         }  
    32.         return result;  
    33.     }  

                   HttpPost

                  如果使用HttpPost方法提交HTTP POST请求,则需要使用HttpPost类的setEntity方法设置请求参数。参数则必须用NameValuePair[]数组存储。

    [java] view plain copy
     
    1. public String doPost()  
    2.     {  
    3.         String uriAPI = "http://XXXXXX";//Post方式没有参数在这里  
    4.         String result = "";  
    5.         HttpPost httpRequst = new HttpPost(uriAPI);//创建HttpPost对象  
    6.           
    7.         List <NameValuePair> params = new ArrayList<NameValuePair>();  
    8.         params.add(new BasicNameValuePair("str", "I am Post String"));  
    9.           
    10.         try {  
    11.             httpRequst.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8));  
    12.             HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequst);  
    13.             if(httpResponse.getStatusLine().getStatusCode() == 200)  
    14.             {  
    15.                 HttpEntity httpEntity = httpResponse.getEntity();  
    16.                 result = EntityUtils.toString(httpEntity);//取出应答字符串  
    17.             }  
    18.         } catch (UnsupportedEncodingException e) {  
    19.             // TODO Auto-generated catch block  
    20.             e.printStackTrace();  
    21.             result = e.getMessage().toString();  
    22.         }  
    23.         catch (ClientProtocolException e) {  
    24.             // TODO Auto-generated catch block  
    25.             e.printStackTrace();  
    26.             result = e.getMessage().toString();  
    27.         }  
    28.         catch (IOException e) {  
    29.             // TODO Auto-generated catch block  
    30.             e.printStackTrace();  
    31.             result = e.getMessage().toString();  
    32.         }  
    33.         return result;  
    34.     }  



              以发送连接请求时,需要设置链接超时和请求超时等参数,否则会长期停止或者崩溃。

    [java] view plain copy
     
      1. HttpParams httpParameters = new BasicHttpParams();  
      2. HttpConnectionParams.setConnectionTimeout(httpParameters, 10*1000);//设置请求超时10秒  
      3. HttpConnectionParams.setSoTimeout(httpParameters, 10*1000); //设置等待数据超时10秒  
      4. HttpConnectionParams.setSocketBufferSize(params, 8192);  
      5. HttpClient httpclient = new DefaultHttpClient(httpParameters); //此时构造DefaultHttpClient时将参数传入  
      6.   
      7.   
      8.   
      9. 由于是联网,在AndroidManifest.xml中添加网络连接的权限  
      10. <uses-permission android:name="android.permission.INTERNET"/> 
  • 相关阅读:
    python3图片转化成字符画
    ubuntu 18.04安装PIL(Python Imaging Library )
    Ubuntu 18.04安装钉钉
    django 使用iframe跨域请求
    django 自定义日志字段
    Ubuntu18.04下安装搜狗输入法(亲测有效)
    Nginx 配置指令手册
    js闭包Demo
    自己写了一个无缝滚动的插件(jQuery)
    写JQuery 插件 什么?你还不会写JQuery 插件
  • 原文地址:https://www.cnblogs.com/xiaohu1218/p/7883450.html
Copyright © 2011-2022 走看看