Ref:http://blog.csdn.net/zuolongsnail/article/details/6373051

Android应用经常会和服务器端交互,这就需要手机客户端发送网络请求,下面介绍四种常用网络请求方式,我这边是通过Android单元测试来完成这四种方法的,还不清楚Android的单元测试的同学们请看Android开发技巧总结中的Android单元测试的步骤一文。

java.net包中的HttpURLConnection类

Get方式:

// Get方式请求

public static void requestByGet() throws Exception {

String path = "https://reg.163.com/logins.jsp?id=helloworld&pwd=android";

// 新建一个URL对象

URL url = new URL(path);

// 打开一个HttpURLConnection连接

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

// 设置连接超时时间

urlConn.setConnectTimeout(5 * 1000);

// 开始连接

urlConn.connect();

// 判断请求是否成功

if (urlConn.getResponseCode() == HTTP_200) {

// 获取返回的数据

byte[] data = readStream(urlConn.getInputStream());

Log.i(TAG_GET, "Get方式请求成功,返回数据如下:");

Log.i(TAG_GET, new String(data, "UTF-8"));

} else {

Log.i(TAG_GET, "Get方式请求失败");

}

// 关闭连接

urlConn.disconnect();

}

Post方式:

// Post方式请求

public static void requestByPost() throws Throwable {

String path = "https://reg.163.com/logins.jsp";

// 请求的参数转换为byte数组

String params = "id=" + URLEncoder.encode("helloworld", "UTF-8")

+ "&pwd=" + URLEncoder.encode("android", "UTF-8");

byte[] postData = params.getBytes();

// 新建一个URL对象

URL url = new URL(path);

// 打开一个HttpURLConnection连接

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

// 设置连接超时时间

urlConn.setConnectTimeout(5 * 1000);

// Post请求必须设置允许输出

urlConn.setDoOutput(true);

// Post请求不能使用缓存

urlConn.setUseCaches(false);

// 设置为Post请求

urlConn.setRequestMethod("POST");

urlConn.setInstanceFollowRedirects(true);

// 配置请求Content-Type

urlConn.setRequestProperty("Content-Type",

"application/x-www-form-urlencode");

// 开始连接

urlConn.connect();

// 发送请求参数

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

dos.write(postData);

dos.flush();

dos.close();

// 判断请求是否成功

if (urlConn.getResponseCode() == HTTP_200) {

// 获取返回的数据

byte[] data = readStream(urlConn.getInputStream());

Log.i(TAG_POST, "Post请求方式成功,返回数据如下:");

Log.i(TAG_POST, new String(data, "UTF-8"));

} else {

Log.i(TAG_POST, "Post方式请求失败");

}

}

org.apache.http包中的HttpGet和HttpPost类

Get方式:

// HttpGet方式请求

public static void requestByHttpGet() throws Exception {

String path = "https://reg.163.com/logins.jsp?id=helloworld&pwd=android";

// 新建HttpGet对象

HttpGet httpGet = new HttpGet(path);

// 获取HttpClient对象

HttpClient httpClient = new DefaultHttpClient();

// 获取HttpResponse实例

HttpResponse httpResp = httpClient.execute(httpGet);

// 判断是够请求成功

if (httpResp.getStatusLine().getStatusCode() == HTTP_200) {

// 获取返回的数据

String result = EntityUtils.toString(httpResp.getEntity(), "UTF-8");

Log.i(TAG_HTTPGET, "HttpGet方式请求成功,返回数据如下:");

Log.i(TAG_HTTPGET, result);

} else {

Log.i(TAG_HTTPGET, "HttpGet方式请求失败");

}

}

Post方式:

// HttpPost方式请求

public static void requestByHttpPost() throws Exception {

String path = "https://reg.163.com/logins.jsp";

// 新建HttpPost对象

HttpPost httpPost = new HttpPost(path);

// Post参数

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

params.add(new BasicNameValuePair("id", "helloworld"));

params.add(new BasicNameValuePair("pwd", "android"));

// 设置字符集

HttpEntity entity = new UrlEncodedFormEntity(params, HTTP.UTF_8);

// 设置参数实体

httpPost.setEntity(entity);

// 获取HttpClient对象

HttpClient httpClient = new DefaultHttpClient();

// 获取HttpResponse实例

HttpResponse httpResp = httpClient.execute(httpPost);

// 判断是够请求成功

if (httpResp.getStatusLine().getStatusCode() == HTTP_200) {

// 获取返回的数据

String result = EntityUtils.toString(httpResp.getEntity(), "UTF-8");

Log.i(TAG_HTTPGET, "HttpPost方式请求成功,返回数据如下:");

Log.i(TAG_HTTPGET, result);

} else {

Log.i(TAG_HTTPGET, "HttpPost方式请求失败");

}

}

以上是一些部分代码,测试的时候在测试类中运行对应的测试方法即可。

Android进阶(一)几种网络请求方式详解的更多相关文章

  1. VirtualBox的四种网络连接方式详解

    VirtualBox中有4中网络连接方式: 1. NAT 2. Bridged Adapter 3. Internal 4. Host-only Adapter VMWare中有三种,其实他跟VMWa ...

  2. JAVA中的四种JSON解析方式详解

    JAVA中的四种JSON解析方式详解 我们在日常开发中少不了和JSON数据打交道,那么我们来看看JAVA中常用的JSON解析方式. 1.JSON官方 脱离框架使用 2.GSON 3.FastJSON ...

  3. Android学习笔记_50_(转 四种加载方式详解(standard singleTop singleTask singleInstance)

    Android之四种加载方式 (http://marshal.easymorse.com/archives/2950 图片) 在多Activity开发中,有可能是自己应用之间的Activity跳转,或 ...

  4. Android 四种加载方式详解(standard singleTop singleTask singleInstance) .

    Android之四种加载方式 (http://marshal.easymorse.com/archives/2950 图片) 在多Activity开发中,有可能是自己应用之间的Activity跳转,或 ...

  5. VMware 虚拟机的网络连接方式详解

         VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作 ...

  6. 一次完整的HTTP网络请求过程详解

    0.  前言 从我们在浏览器的地址栏输入http://blog.csdn.net/seu_calvin后回车,到我们看到该博客的主页,这中间经历了什么呢?简单地回答这个问题,大概是经历了域名解析.TC ...

  7. 「JavaScript」四种跨域方式详解

    超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...

  8. thinkphp四种url访问方式详解

    本文实例分析了thinkphp的四种url访问方式.分享给大家供大家参考.具体分析如下: 一.什么是MVC thinkphp的MVC模式非常灵活,即使只有三个中和一个也可以运行. M -Model 编 ...

  9. 「JavaScript」JS四种跨域方式详解

    原文地址https://segmentfault.com/a/1190000003642057 超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript ...

随机推荐

  1. .net如何引用System.Drawing.Drawing2D 命名空间和System.Drawing.Image及其相关概念

    其实这个很简单,直接在引用那里单击右键选择添加框架,然后找到System.Drawing就OK了, 其实并没有网上所说的那样需要下载什么Drawing.BLL. 首先Syetem.Drawing.Dr ...

  2. cisco 的六种模式(cisco 系统)

  3. SQL之DISTINCT

    警告:不能部分使用DISTINCT. DISTINCT关键字作用于所有的列,不仅仅是跟在其后的那一列.例如,你指定SELECT DISTINCT vend_id, prod_price,除非指定的两列 ...

  4. html下载excel模板

    只需要href等于模板存放的路径即可 <a href="../../TempLate/Attitude.xlsx" class="easyui-linkbutton ...

  5. Mobx使用详解

    Mobx是一个功能强大,上手非常容易的状态管理工具.就连redux的作者也曾经向大家推荐过它,在不少情况下你的确可以使用Mobx来替代掉redux. 本教程旨在介绍其用法及概念,并重点介绍其与Reac ...

  6. Linux pip安装使用

    pip安装使用详解 pip类似RedHat里面的yum,安装Python包非常方便.本节详细介绍pip的安装.以及使用方法. 1.pip下载安装 1.1 pip下载   1 # wget " ...

  7. Linux系统上的命令使用方法

    许多windows非常熟悉ipconfig命令行工具,它被用来获取网络接口配置信息并对此进行修改.Linux系统拥有一个类似的工具,也就是ifconfig(interfaces config).通常需 ...

  8. php序列化漏洞理解

    0x01什么是序列化 序列化就是将我们的 对象转变成一个字符串,保存对象的值方便之后的传递与使用. 0x02为什么要序列化 如果为一个脚本中想要调用之前一个脚本的变量,但是前一个脚本已经执行完毕,所有 ...

  9. python--ftp服务器(pyftpdlib)

    # -*- coding: utf-8 -*-# @Time : 2018/4/11 16:47# @Author : liuxiaobing# @File : test2.py# @Software ...

  10. linux shell数组

    from: http://www.jb51.net/article/34322.htm bash shell只支持一维数组,但参数个数没有限制. 声明一个数组:declare -a array(其实不 ...