`

Android之使用HTTP的get,post,HttpClient三种方式向服务器端提交文本数据

 
阅读更多
客户端代码示例:

/** 
* HTTP请求 
* @author kesenhoo 

*/ 
public class HttpRequest   
{     
    public static boolean sendXML(String path, String xml)throws Exception  
    {  
        byte[] data = xml.getBytes();  
        URL url = new URL(path);  
        HttpURLConnection conn = (HttpURLConnection)url.openConnection();  
        conn.setRequestMethod("POST");  
        conn.setConnectTimeout(5 * 1000);  
        //如果通过post提交数据,必须设置允许对外输出数据  
        conn.setDoOutput(true);  
        conn.setRequestProperty("Content-Type", "text/xml; charset=UTF-8");  
        conn.setRequestProperty("Content-Length", String.valueOf(data.length));  
        OutputStream outStream = conn.getOutputStream();  
        outStream.write(data);  
        outStream.flush();  
        outStream.close();  
        if(conn.getResponseCode()==200)  
        {  
            return true;  
        }  
        return false;  
    }  
    /** 
     * 通过get方式提交参数给服务器 
     * @param path 
     * @param params 
     * @param enc 
     * @return 
     * @throws Exception 
     */ 
    public static boolean sendGetRequest(String path, Map<String, String> params, String enc) throws Exception  
    {  
        //构造如下形式的字符串,这里的字符串依情况不同  
        // ?method=save&title=435435435&timelength=89&        
        //使用StringBuilder对象  
        StringBuilder sb = new StringBuilder(path);  
        sb.append('?');       
        //迭代Map  
        for(Map.Entry<String, String> entry : params.entrySet())  
        {  
            sb.append(entry.getKey()).append('=')  
                .append(URLEncoder.encode(entry.getValue(), enc)).append('&');  
        }  
        sb.deleteCharAt(sb.length()-1);  
        //打开链接  
        URL url = new URL(sb.toString());  
        HttpURLConnection conn = (HttpURLConnection)url.openConnection();  
        conn.setRequestMethod("GET");  
        conn.setConnectTimeout(5 * 1000);  
        //如果请求响应码是200,则表示成功  
        if(conn.getResponseCode()==200)  
        {  
            return true;  
        }  
        return false;  
    }  
      
    /** 
     * 通过Post方式提交参数给服务器 
     * @param path 
     * @param params 
     * @param enc 
     * @return 
     * @throws Exception 
     */ 
    public static boolean sendPostRequest(String path, Map<String, String> params, String enc) throws Exception  
    {  
        //需要构造的字符串形式如下:  
        // title=dsfdsf&timelength=23&method=save  
        StringBuilder sb = new StringBuilder();  
        //如果参数不为空  
        if(params!=null && !params.isEmpty())  
        {  
            for(Map.Entry<String, String> entry : params.entrySet())  
            {  
                //Post方式提交参数的话,不能省略内容类型与长度  
                sb.append(entry.getKey()).append('=')  
                    .append(URLEncoder.encode(entry.getValue(), enc)).append('&');  
            }  
            sb.deleteCharAt(sb.length()-1);  
        }  
        //得到实体的二进制数据  
        byte[] entitydata = sb.toString().getBytes();  
        URL url = new URL(path);  
        HttpURLConnection conn = (HttpURLConnection)url.openConnection();  
        conn.setRequestMethod("POST");  
        conn.setConnectTimeout(5 * 1000);  
        //如果通过post提交数据,必须设置允许对外输出数据  
        conn.setDoOutput(true);  
        //这里只设置内容类型与内容长度的头字段  
        //内容类型Content-Type: application/x-www-form-urlencoded  
        //内容长度Content-Length: 38  
        conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");  
        conn.setRequestProperty("Content-Length", String.valueOf(entitydata.length));  
        OutputStream outStream = conn.getOutputStream();  
        //把实体数据写入是输出流  
        outStream.write(entitydata);  
        //内存中的数据刷入  
        outStream.flush();  
        outStream.close();  
        //如果请求响应码是200,则表示成功  
        if(conn.getResponseCode()==200)  
        {  
            return true;  
        }  
        return false;  
    }  
      
    /** 
     * 在遇上HTTPS安全模式或者操作cookie的时候使用HTTPclient会方便很多 
     * 使用HTTPClient(开源项目)向服务器提交参数 
     * @param path 
     * @param params 
     * @param enc 
     * @return 
     * @throws Exception 
     */ 
    public static boolean sendRequestFromHttpClient(String path, Map<String, String> params, String enc) throws Exception  
    {  
        //需要把参数放到NameValuePair  
        List<NameValuePair> paramPairs = new ArrayList<NameValuePair>();  
        if(params!=null && !params.isEmpty())  
        {  
            for(Map.Entry<String, String> entry : params.entrySet())  
            {  
                paramPairs.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));  
            }  
        }  
        //对请求参数进行编码,得到实体数据  
        UrlEncodedFormEntity entitydata = new UrlEncodedFormEntity(paramPairs, enc);  
        //构造一个请求路径  
        HttpPost post = new HttpPost(path);   
        //设置请求实体  
        post.setEntity(entitydata);  
        //浏览器对象  
        DefaultHttpClient client = new DefaultHttpClient();   
        //执行post请求  
        HttpResponse response = client.execute(post);  
        //从状态行中获取状态码,判断响应码是否符合要求  
        if(response.getStatusLine().getStatusCode()==200)  
        {  
            return true;  
        }  
        return false;  
    }  


分享到:
评论

相关推荐

    Android客户端与服务器端的json数据交互(内含大量知识点)

    在Android应用开发中,客户端与服务器端的数据交互是不可或缺的一部分,JSON作为一种轻量级的数据交换格式,被广泛用于Android和服务器之间的通信。本教程将详细阐述Android客户端如何使用JSON进行数据交互,包括...

    封装一个类搞定90%安卓客户端与服务器端交互

    2.Get方式与服务器端交互数据. 3.Post方式与服务器端交互数据. 4.HttpClient方式与服务器端交互数据. 5.上传文件到服务器端. 6.从服务器端下载文件. 7.从服务器端读取文本文件. http://blog.csdn.net/lk_blog

    android利用httppost实现和服务器的通讯

    HTTPPost是HTTP协议中的一种方法,用于向指定资源提交数据以请求服务器进行处理。本篇主要介绍如何在Android应用中使用HttpPost实现与服务器的通信,以及涉及到的相关技术点。 首先,我们需要理解Android网络访问的...

    Android与PC端通信简单Demo

    - **POST请求**:用于向服务器提交数据,数据封装在请求体中,无长度限制,相对更安全。在Demo中,POST请求可能用于提交用户输入或者上传文件。 6. **数据序列化与反序列化**: 在Android与PC通信过程中,数据...

    Android Servlet WEB http

    而HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络协议,它定义了客户端和服务器之间交换数据的方式。Android作为移动开发平台,常常需要通过HTTP与Web服务器进行数据交互,实现客户端应用的功能。 1. ...

    httpClient

    HttpClient是Android平台上一个重要的网络通信库,主要用于向服务器发起HTTP请求并处理响应。它提供了丰富的API,使得开发者能够灵活地构建各种复杂的网络交互场景。在Android应用开发中,HttpClient是获取Web服务...

    android http 与服务端进行数据交换

    在进行数据交换时,通常需要将Java对象序列化为JSON或XML格式,再由服务器反序列化为服务器端对象。Android中可以使用Gson、Jackson或Fastjson等库进行数据转换。 七、安全性考虑 在进行HTTP通信时,应考虑数据的...

    android socket、http等6种网络通信源码

    虽然Android API Level 26后不再支持Apache的HttpClient库,但在早期版本或第三方库中,HttpClient仍广泛使用。它提供了更丰富的功能,如自动处理重定向、管理Cookie、支持HTTPS等。源码示例会展示如何创建...

    android移动互联笔记

    - **服务器端处理**:在服务器端对数据进行编码转换,确保客户端接收到正确的编码。 #### 五、总结 在Android移动互联开发中,掌握HTTP通信和Socket通信是非常重要的。这两种技术各有优势,可以根据具体需求选择...

    android客户端与servlet服务端交互的很好的例子

    在Android开发中,客户端与服务器端的交互是应用程序的核心部分,尤其当涉及到数据交换和远程服务调用时。本示例主要关注Android客户端如何与Servlet服务端进行有效的通信,涉及了多种数据传输方式,如传递参数、...

    客户端与服务器端通讯

    在这个过程中,客户端通常指的是用户设备上的应用,如浏览器、手机APP或者桌面软件,而服务器端则是运行在远程计算机上的程序,负责处理客户端的请求并返回数据。本文将深入探讨客户端与服务器端通讯的原理、常用...

    Base64.java及其使用方法

    在Android开发中,如果需要通过HTTP客户端(如HttpClient)将图片上传到服务器,由于HTTP协议本身只支持ASCII字符,不能直接传输二进制数据,因此通常会先将图片数据转化为Base64字符串,再以文本形式发送,服务器端...

    Android网络功能开发-使用HTTP协议通信的例子

    本示例主要关注使用HTTP协议进行客户端-服务器通信,分为Android客户端和Java Servlet服务器端两部分。 首先,我们来看Android客户端的开发。Android提供了一系列API来支持HTTP通信,主要包括HttpURLConnection和...

    android HTTP通信简单Demo

    在Android应用开发中,HTTP通信是连接客户端应用与服务器端数据交换的重要手段。这个"android HTTP通信简单Demo"提供了一个基础的示例,用于展示如何在Android应用中实现HTTP请求和响应。在这个教程中,我们将深入...

    Http通信demo

    在IT领域,HTTP(超文本传输协议)是网络上应用最为广泛的一种协议,它用于从万维网服务器传输超文本到本地浏览器。本篇将详细探讨两种常见的Java实现HTTP通信的方法:HttpClient和HttpURLConnection。 首先,...

    mobile_http_xml

    然而,由于维护问题,`HttpClient`在新版本的Android SDK中已被弃用,推荐使用`HttpURLConnection`或第三方库如OkHttp。 4. **XML解析**:移动应用接收到XML数据后,需要解析成应用程序可以理解的结构。Android提供...

    android网络请求

    4. **Java Servelet**:在后端,我们使用Java Servelet作为服务器端处理程序。Servelet是Java EE中用于接收和响应HTTP请求的组件。一个基本的Servlet生命周期包括初始化、服务、销毁三个阶段。 5. **Servlet配置**...

Global site tag (gtag.js) - Google Analytics