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

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

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

//设置输入和输出流
urlConn.setDoOutput(true);
urlConn.setDoInput(true);
//设置请求方式为POST
urlConn.setRequestMethod("POST");
//POST请求不能使用缓存
urlConn.setUseCaches(false);
//关闭连接
urlConn.disConnection(); 

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

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

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

        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方式进行传输时,需要进行字符编码。

转载于:https://www.cnblogs.com/waddell/archive/2013/02/15/3393031.html

Android 网络编程之Http通信相关推荐

  1. Android 网络编程之HTTPS详解

    前言:HTTPS涉及相关的知识,总是很难的将其归纳总结起来,本文旨在带你学习详细的HTTPS相关知识点,看完本文后,你会了解到以下相关知识点: HTTPS的工作原理 HTTPS为什么要这样设计 密码学 ...

  2. Android 网络编程之OkHttp源码解析

    前言:OkHttp框架是Android的网络请求框架,无数的项目都在使用着这个框架,重要性不言而喻; 本文会将OKHTTP的源码进行拆解,每个部分来单独学习,由简入深,循序渐进,篇幅较长,建议收藏,慢 ...

  3. 1.6 网络编程之 UDP通信

    ************************************************** * 本文由小鸟飞飞整理发表 <samboy@sohu.com> * * 首发网站:蓝丽 ...

  4. python 网络编程之Socket通信案例消息发送与接收

    背景 网络编程是python编程中的一项基本技术.本文将实现一个简单的Socket通信案例消息发送与接收 正文 在python中的socket编程的大致流程图如上所示 我们来首先编写客户端的代码: # ...

  5. android网络编程之HttpUrlConnection的讲解--GET请求

    1.服务器后台使用Servlet开发,这里不再介绍. 2.测试机通过局域网链接到服务器上,可以参考我的博客:http://www.cnblogs.com/begin1949/p/4905192.htm ...

  6. 嵌入式学习之QT学习---8 QT网络编程之TCP通信

    前言: Qt网络模块提供了用于编写TCP/IP客户端和服务器端程序的各种类,如用于TCP通信的QTcpSocket和QTcpServer,用于UDP通信的QUdpSocket,还有用于实现HTTP.F ...

  7. Android网络编程之Http请求服务器数据(POST方式)

    Android中的网络请求主要有GET和POST方式.POST方式比GET方式更为安全,因为需要发送的消息不是嵌入在url中的,同时能比GET发送更多的数据. 本文讨论使用POST方式向聚合数据API ...

  8. Android网络编程之Http请求服务器数据(GET方式)

    进行Android应用开发,其中不得不使用到网络编程,最基本的就是向服务器发送Http请求,并接收从服务器返回的数据,该类数据一般为JSON或XML格式. 向服务器进行请求数据一般有GET.POST两 ...

  9. 网络编程之UDP通信

    一.UDP简介 UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一 ...

最新文章

  1. multisim变压器反馈式_变压器的分类及特点
  2. UVA11174村民排队问题
  3. 最新cocoaPods安装、升级、卸载及删除库命令(持续更新)
  4. C++ Opengl图形颜色源码
  5. 统计分组的原则是要体现什么_什么样的卖场原则更能体现商业设计的价值!
  6. Windows Server 2012 R2 VDI系列(八)—发布RemoteDesktop
  7. ROST情感分析的语法规则_用c语言手搓一个600行的类c语言解释器: 给编程初学者的解释器教程(4)- 语法分析1...
  8. MongoVUE破解
  9. win7新建ios开发环境
  10. SRE工作手册——基础
  11. 真无线蓝牙耳机哪个音质最好?2021入门级蓝牙耳机排行榜!
  12. 文件属性安全组误删恢复
  13. 解读SIM卡、USIM卡、UICC卡、eSIM卡的区别
  14. HTML和Css基础知识点笔记
  15. [52PJ] Java面向对象笔记(转自52 1510988116)
  16. 如何通过海外住宅代理预防Facebook账号出现关联的情况
  17. ubuntu16.04安装百度网盘
  18. mac dreamveaver cc破解方法
  19. QT开发中常用的快捷键(Windows+QT)
  20. 前端必会三种CSS布局

热门文章

  1. 分享10个适合初学者学习的C开源项目代码
  2. 【lua学习】3.字符串
  3. python列表中随机两个_随机化两个列表并在python中维护顺序
  4. AppScan api登录接口 postman_如何通过Postman调用EDI系统的API?
  5. java bean id_在 JSP中使用JavaBean的标签是 ,其中 id的用途是 __________________学小易找答案...
  6. 关于工业级RS485串口服务器的组网方式详解
  7. 【渝粤教育】国家开放大学2018年秋季 1137t医院管理 参考试题
  8. 【渝粤教育】广东开放大学 物权法 形成性考核 (43)
  9. 物联网卡加持智能电网,发展更具优势
  10. LoRa 和NB-IoT 那个才是智慧停车低成本的最佳选择