android Http网络通信方式总结

来源:互联网 发布:大数据maven 教程 编辑:程序博客网 时间:2024/05/29 18:23

android http网络通信方式总结

摘要:android中提供了两种接口用来开发HTTP程序:HttpURLConnection   和   HttpClient  接口

Http通信中有很多种请求方式,各个方法的解释如下:    

   GET    请求获取Request-URI所标识的资源
    POST    Request-URI所标识的资源后附加新的数据
    HEAD    请求获取由Request-URI所标识的资源的响应消息报头
    PUT    请求服务器存储一个资源,并用Request-URI作为其标识
    DELETE    请求服务器删除Request-URI所标识的资源
    TRACE    请求服务器回送收到的请求信息,主要用于测试或诊断
    CONNECT    保留将来使用

主要用的是POST和GET请求方式。GET可以获得静态页面,也可以把参数放在URL字符串后面,传递给服务器。而POST方法的参数是放在Http请求中。因此,在编程之前,应当首先明确使用的请求方法,然后再根据所使用的方式选择相应的编程方式。

1. HttpURLConnection 接口

HttpURLConnectiion 是继承于URLConnection类,二者都是抽象类。其对象主要通过URL的openConnection方法获得。创建方法如下代码所示:

URL url = new URL("http://www.51cto.com/index.jsp?par=123456");

HttpURLConnection urlConn=(HttpURLConnection)url.openConnection();

 

通过以下方法可以对请求的属性进行一些设置,如下所示:

//设置输入和输出流  
urlConn.setDoOutput(false);  
urlConn.setDoInput(true);  
// //设置请求方式为GET  
urlConn.setRequestMethod("GET");  
// //POST请求不能使用缓存  
urlConn.setUseCaches(true);  
//设置这个连接是否可以从新使用
urlConn.setInstanceFollowRedirects(true);


HttpURLConnection默认使用GET方式,如果需要使用POST方式,则需要setRequestMethod设置

两种使用方法的示例如下:

(1)使用GET方式:

String resultData = "";
String httpUrl = "http://appserver.lewaimai.com.cn/index.php/api/login/timestamp=1399534055&nonce=jytoi&username=liantongxue&signature=f2b3925969ccf7d2b02a381aa7827254";
URL url = new URL(httpUrl);
HttpURLConnection urlConn=(HttpURLConnection)url.openConnection(); 
//设置输入和输出流  
urlConn.setDoOutput(false);  
urlConn.setDoInput(true);  
// //设置请求方式为GET  
urlConn.setRequestMethod("GET");  
// //POST请求不能使用缓存  
urlConn.setUseCaches(true);  
//设置这个连接是否可以从新使用
urlConn.setInstanceFollowRedirects(true);
urlConn.connect();
//得到读取的内容(流)  
        InputStreamReader in = new InputStreamReader(urlConn.getInputStream());  
        // 为输出创建BufferedReader  
        BufferedReader buffer = new BufferedReader(in);  
        String inputLine = null;  
        //使用循环来读取获得的数据  
        while (((inputLine = buffer.readLine()) != null))  
        {  
            //我们在每一行后面加上一个"\n"来换行  
            resultData += inputLine + "\n";  
        }  
        Log.d("strResult", resultData);
        //关闭InputStreamReader  
        in.close();  
        //关闭http连接  
        urlConn.disconnect(); 

 

 

 

(2)使用POST方式示例:

String httpUrl = "http://192.168.1.110:8080/httpget.jsp";  

        //获得的数据  

        String resultData = "";  

        URL url = null;  

        try 

        {  

            //构造一个URL对象  

            url = new URL(httpUrl);   

        }  

        catch (MalformedURLException e)  

        {  

            Log.e(DEBUG_TAG, "MalformedURLException");  

        }  

        if (url != null)  

        {  

            try 

            {  

                // 使用HttpURLConnection打开连接  

                HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();  

                //因为这个是post请求,设立需要设置为true  

                urlConn.setDoOutput(true);  

                urlConn.setDoInput(true);  

                // 设置以POST方式  

                urlConn.setRequestMethod("POST");  

                // Post 请求不能使用缓存  

                urlConn.setUseCaches(false);  

                urlConn.setInstanceFollowRedirects(true);  

                // 配置本次连接的Content-type,配置为application/x-www-form-urlencoded的  

                urlConn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");  

                // 连接,从postUrl.openConnection()至此的配置必须要在connect之前完成,  

                // 要注意的是connection.getOutputStream会隐含的进行connect。  

                urlConn.connect();  

                //DataOutputStream流  

                DataOutputStream out = new DataOutputStream(urlConn.getOutputStream());  

                //要上传的参数  

                String content = "par=" + URLEncoder.encode("ABCDEFG", "gb2312");  

                //将要上传的内容写入流中  

                out.writeBytes(content);   

               //刷新、关闭  

                out.flush();  

                out.close();  

 

 

2. HttpClient接口使用Apache提供的HttpClient接口同样可以进行HTTP操作。
    对于GET和POST请求方法的操作有所不同。GET方法的操作代码示例如下:

// http地址  

        String httpUrl = "http://192.168.1.110:8080/httpget.jsp?par=HttpClient_android_Get";  

        //HttpGet连接对象  

        HttpGet httpRequest = new HttpGet(httpUrl);  

         //取得HttpClient对象  

            HttpClient httpclient = new DefaultHttpClient();  

            //请求HttpClient,取得HttpResponse  

            HttpResponse httpResponse = httpclient.execute(httpRequest);  

            //请求成功  

            if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK)  

            {  

                //取得返回的字符串  

                String strResult = EntityUtils.toString(httpResponse.getEntity());  

                mTextView.setText(strResult);  

            }  

            else 

            {  

                mTextView.setText("请求错误!");  

            }  

        } 

 

 



    使用POST方法进行参数传递时,需要使用NameValuePair来保存要传递的参数。,另外,还需要设置所使用的字符集。代码如下所示:

// http地址  

        String httpUrl = "http://192.168.1.110:8080/httpget.jsp";  

        //HttpPost连接对象  

        HttpPost httpRequest = new HttpPost(httpUrl);  

        //使用NameValuePair来保存要传递的Post参数  

        List<NameValuePair> params = new ArrayList<NameValuePair>();  

        //添加要传递的参数  

        params.add(new BasicNameValuePair("par", "HttpClient_android_Post"));  

        //设置字符集  

            HttpEntity httpentity = new UrlEncodedFormEntity(params, "gb2312");  

            //请求httpRequest  

            httpRequest.setEntity(httpentity);  

            //取得默认的HttpClient  

            HttpClient httpclient = new DefaultHttpClient();  

            //取得HttpResponse  

            HttpResponse httpResponse = httpclient.execute(httpRequest);  

            //HttpStatus.SC_OK表示连接成功  

            if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK)  

            {  

                //取得返回的字符串  

                String strResult = EntityUtils.toString(httpResponse.getEntity());  

                mTextView.setText(strResult);  

            }  

            else 

            {  

                mTextView.setText("请求错误!");  

            }  

        } 

 

     HttpClient实际上是对Java提供方法的一些封装,在HttpURLConnection中的输入输出流操作,在这个接口中被统一封装成了HttpPost(HttpGet)和HttpResponse,这样,就减少了操作的繁琐性。

    另外,在使用POST方式进行传输时,需要进行字符编码。




0 0