`

HttpURLConnection和HttpClient联网

    博客分类:
  • java
 
阅读更多

Android中提供的HttpURLConnection和HttpClient接口可以用来开发HTTP程序。以下是本人在学习中的总结与归纳。
1. HttpURLConnection接口
    首先需要明确的是,Http通信中的POST和GET请求方式的不同。GET可以获得静态页面,也可以把参数放在URL字符串后面,传递给服务器。而 POST方法的参数是放在Http请求中。因此,在编程之前,应当首先明确使用的请求方法,然后再根据所使用的方式选择相应的编程方式。
    HttpURLConnection是继承于URLConnection类,二者都是抽象类。其对象主要通过URL的openConnection方法获得。创建方法如下代码所示:

 
 

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

   

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

 
 

  1. //设置输入和输出流  
  2. urlConn.setDoOutput(true);  
  3. urlConn.setDoInput(true);  
  4. //设置请求方式为POST  
  5. urlConn.setRequestMethod("POST");  
  6. //POST请求不能使用缓存  
  7. urlConn.setUseCaches(false);  
  8. //关闭连接  
  9. urlConn.disConnection();  
  10.  



HttpURLConnection默认使用GET方式,例如下面代码所示:

 
 

  1. //使用HttpURLConnection打开连接  
  2.                 HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();  
  3.                 //得到读取的内容(流)  
  4.                 InputStreamReader in = new InputStreamReader(urlConn.getInputStream());  
  5.                 // 为输出创建BufferedReader  
  6.                 BufferedReader buffer = new BufferedReader(in);  
  7.                 String inputLine = null;  
  8.                 //使用循环来读取获得的数据  
  9.                 while (((inputLine = buffer.readLine()) != null))  
  10.                 {  
  11.                     //我们在每一行后面加上一个"\n"来换行  
  12.                     resultData += inputLine + "\n";  
  13.                 }           
  14.                 //关闭InputStreamReader  
  15.                 in.close();  
  16.                 //关闭http连接  
  17.                 urlConn.disconnect(); 



    如果需要使用POST方式,则需要setRequestMethod设置。代码如下:

 
 

  1. String httpUrl = "http://192.168.1.110:8080/httpget.jsp";  
  2.         //获得的数据  
  3.         String resultData = "";  
  4.         URL url = null;  
  5.         try 
  6.         {  
  7.             //构造一个URL对象  
  8.             url = new URL(httpUrl);   
  9.         }  
  10.         catch (MalformedURLException e)  
  11.         {  
  12.             Log.e(DEBUG_TAG, "MalformedURLException");  
  13.         }  
  14.         if (url != null)  
  15.         {  
  16.             try 
  17.             {  
  18.                 // 使用HttpURLConnection打开连接  
  19.                 HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();  
  20.                 //因为这个是post请求,设立需要设置为true  
  21.                 urlConn.setDoOutput(true);  
  22.                 urlConn.setDoInput(true);  
  23.                 // 设置以POST方式  
  24.                 urlConn.setRequestMethod("POST");  
  25.                 // Post 请求不能使用缓存  
  26.                 urlConn.setUseCaches(false);  
  27.                 urlConn.setInstanceFollowRedirects(true);  
  28.                 // 配置本次连接的Content-type,配置为application/x-www-form-urlencoded的 
  29.                 urlConn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");  
  30.                 // 连接,从postUrl.openConnection()至此的配置必须要在connect之前完成,  
  31.                 // 要注意的是connection.getOutputStream会隐含的进行connect。  
  32.                 urlConn.connect();  
  33.                 //DataOutputStream流  
  34.                 DataOutputStream out = new DataOutputStream(urlConn.getOutputStream());  
  35.                 //要上传的参数  
  36.                 String content = "par=" + URLEncoder.encode("ABCDEFG""gb2312");  
  37.                 //将要上传的内容写入流中  
  38.                 out.writeBytes(content);   
  39.                 //刷新、关闭  
  40.                 out.flush();  
  41.                 out.close();  



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

 
 

  1. // http地址  
  2.         String httpUrl = "http://192.168.1.110:8080/httpget.jsp?par=HttpClient_android_Get";  
  3.         //HttpGet连接对象  
  4.         HttpGet httpRequest = new HttpGet(httpUrl);  
  5.          //取得HttpClient对象  
  6.             HttpClient httpclient = new DefaultHttpClient();  
  7.             //请求HttpClient,取得HttpResponse  
  8.             HttpResponse httpResponse = httpclient.execute(httpRequest);  
  9.             //请求成功  
  10.             if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK)  
  11.             {  
  12.                 //取得返回的字符串  
  13.                 String strResult = EntityUtils.toString(httpResponse.getEntity());  
  14.                 mTextView.setText(strResult);  
  15.             }  
  16.             else 
  17.             {  
  18.                 mTextView.setText("请求错误!");  
  19.             }  
  20.         } 



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

 

 
 

  1. // http地址  
  2.         String httpUrl = "http://192.168.1.110:8080/httpget.jsp";  
  3.         //HttpPost连接对象  
  4.         HttpPost httpRequest = new HttpPost(httpUrl);  
  5.         //使用NameValuePair来保存要传递的Post参数  
  6.         List<NameValuePair> params = new ArrayList<NameValuePair>();  
  7.         //添加要传递的参数  
  8.         params.add(new BasicNameValuePair("par""HttpClient_android_Post"));  
  9.         //设置字符集  
  10.             HttpEntity httpentity = new UrlEncodedFormEntity(params, "gb2312");  
  11.             //请求httpRequest  
  12.             httpRequest.setEntity(httpentity);  
  13.             //取得默认的HttpClient  
  14.             HttpClient httpclient = new DefaultHttpClient();  
  15.             //取得HttpResponse  
  16.             HttpResponse httpResponse = httpclient.execute(httpRequest);  
  17.             //HttpStatus.SC_OK表示连接成功  
  18.             if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK)  
  19.             {  
  20.                 //取得返回的字符串  
  21.                 String strResult = EntityUtils.toString(httpResponse.getEntity());  
  22.                 mTextView.setText(strResult);  
  23.             }  
  24.             else 
  25.             {  
  26.                 mTextView.setText("请求错误!");  
  27.             }  
  28.         } 

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

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

 

分享到:
评论

相关推荐

    android 联网请求的两种方式HttpURLConnection和HttpClient

    常见的联网请求方式有两种:HttpURLConnection和HttpClient。下面将详细讲解这两种方法,以及它们如何处理POST和GET请求。 **HttpURLConnection** HttpURLConnection是Java标准库提供的类,自Android 2.3(API级别9...

    运用_Android_实现联网

    在获取Web页面文本的网络部分,开发者可以使用HttpURLConnection或HttpClient等API进行网络请求。例如,使用HttpURLConnection,可以创建一个HTTP GET请求,打开连接,读取响应,并将返回的文本数据显示在TextView中...

    android简单联网

    总结,Android简单联网涵盖了HttpURLConnection的基础使用、HttpClient(已弃用)、以及现代库如OkHttp和Volley的应用。理解这些基本概念和工具是构建任何Android网络应用的第一步。随着项目复杂性的增加,你可能还...

    使用Android实现联网

    - 创建定时任务(如使用`AlarmManager`)定期获取传感器数据,并使用`HttpURLConnection`或`HttpClient`发送POST请求到服务器。 - 处理服务器返回的确认信息,确保数据已成功接收。 4. **扩展应用程序** - 对于...

    在_Android_中实现并发性、联网和数据访问.docx

    在Android平台上,开发人员面临的主要挑战之一是如何有效地处理并发性、联网和数据访问。这篇文章将深入探讨这些关键领域,提供一些实用的技巧和注意事项。 首先,让我们关注并发性。在Android应用中,为了保证用户...

    网易新闻客户端的实现

    Android提供了HttpURLConnection和HttpClient两个API进行HTTP请求。考虑到兼容性和性能,现在更推荐使用HttpURLConnection。开发者需要设置URL、请求方法、头部信息,并处理响应数据,通常以JSON或XML形式。 ...

    A0801获取设备联网状态NetworkStatus1

    此外,Android 2.2及以上版本引入了`android.net.AndroidHttpClient`类,优化了SSL连接和Gzip压缩,不过同样在API级别22后被废弃。 要启用网络访问,应用程序必须在AndroidManifest.xml中声明`&lt;uses-permission&gt;`...

    android开发之网络图片加载

    Android SDK提供了一系列API,如HttpURLConnection和HttpClient,用于访问网络资源。然而,由于这些API的复杂性和性能问题,开发者通常选择第三方库,如Volley、OkHttp或Retrofit,它们提供了更高效和易用的网络请求...

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

    首先,需要在Android项目中引入HttpURLConnection或HttpClient库,这里以HttpClient为例,添加以下依赖(如果使用Android Studio,可能需要在build.gradle文件中添加对应版本的 HttpClient 库): ```groovy ...

    built-client-and-server.zip_android

    在Android开发中,构建客户端和服务器的交互是应用程序功能扩展的关键步骤,特别是在移动应用需要联网获取数据或执行远程操作时。本实例“built-client-and-server.zip”提供了Android平台下实现客户端与服务器通信...

    Android 开发实战经典PPT课件(4-4)共4个.zip

    Android提供了多种网络通信方法,如HttpURLConnection、HttpClient、OkHttp以及Volley等网络库。理解HTTP/HTTPS协议,以及如何处理异步网络请求和数据解析是必备技能。此外,学习如何处理网络连接的断开和重连,以及...

    简易RSS阅读器

    Java提供了HttpURLConnection或HttpClient类来实现网络请求。获取RSS feed后,同样需要进行XML解析。 4. **数据展示**:解析出的RSS信息会显示在用户界面上,可能包括文章列表、详细内容视图等。UI设计通常采用...

    Android实现网络访问

    1. **网络访问API选择**:Android提供了多种方式进行网络访问,如HttpURLConnection、HttpClient(已被弃用)、Volley库、OkHttp库等。其中,HttpURLConnection是Android官方推荐的网络访问API,因为它更高效且易于...

    基于Java实现的GB28181平台.zip

    2. **HTTP/HTTPS协议**:GB28181标准定义了基于HTTP/HTTPS的通信协议,用于设备注册、心跳检测、视频流请求等操作,Java的HttpURLConnection或HttpClient库可以方便地实现这些功能。 3. **XML与SOAP**:GB28181中的...

    Android常见原理性面试专题.docx

    Android中实现WAP联网,通常使用HttpURLConnection或HttpClient等网络库进行HTTP请求。配置网络权限并在代码中构建URL,发起GET或POST请求,然后读取响应数据。 9. **AsyncTask机制** AsyncTask是一个轻量级的...

    WeatherTest_java_readerkpi_

    【描述】中的信息揭示了此项目的核心特点:首先,它具备自动联网的能力,这意味着它使用了Java的网络编程技术,如Socket或HttpClient库来连接到提供天气预报的服务器。其次,它可以获取天气预报信息,这通常涉及到...

    MP3音乐播放器

    为了实现这一功能,开发者可能使用了Java的`java.net`包中的`HttpURLConnection`或者第三方的HTTP客户端库,如Apache HttpClient或OkHttp。 再来讨论一下**MP3播放的控制**。在Java中,音乐播放控制通常包括播放、...

    java网络源码-Networking-Sources-code-java:一些必须具备联网功能的来源

    4. **HTTP协议处理**:在项目中可能会遇到处理HTTP请求的需求,Java的`HttpURLConnection`类提供了一个简单的方法来发送HTTP请求并接收响应。此外,`HttpClient`(Java 11引入)提供了更强大的HTTP/2支持。 5. **...

    猜拳游戏.zip安卓程序项目源码资源下载

    此外,标签中的“apache”可能意味着项目中使用了Apache相关库,如HttpClient或HttpURLConnection,用于网络请求,这在某些情况下可能是为了让游戏具备联网功能,比如排行榜、在线对战等。 总的来说,这份猜拳游戏...

    android显示图片

    通常,我们会先使用`HttpClient`或`OkHttp`发送一个GET请求到图片的URL,然后将响应的二进制数据保存为Bitmap对象。在这个过程中,为了提高用户体验,可以使用异步处理(如AsyncTask或Retrofit)来避免阻塞UI线程。 ...

Global site tag (gtag.js) - Google Analytics