Android应用经常会和服务器端交互,这就需要手机客户端发送网络请求,下面介绍四种常用网络请求方式,我这边是通过Android单元测试来完成这四种方法的,还不清楚Android的单元测试的同学们请看Android开发技巧总结中的Android单元测试的步骤一文。
java.net包中的HttpURLConnection类
Get方式:
01
// Get方式请求
02
public static void requestByGet() throws Exception {
03
String path = "https://reg.163.com/logins.jsp?id=helloworld&pwd=android";
04
// 新建一个URL对象
05
URL url = new URL(path);
06
// 打开一个HttpURLConnection连接
07
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
08
// 设置连接超时时间
09
urlConn.setConnectTimeout(5 * 1000);
10
// 开始连接
11
urlConn.connect();
12
// 判断请求是否成功
13
if (urlConn.getResponseCode() == HTTP_200) {
14
// 获取返回的数据
15
byte[] data = readStream(urlConn.getInputStream());
16
Log.i(TAG_GET, "Get方式请求成功,返回数据如下:");
17
Log.i(TAG_GET, new String(data, "UTF-8"));
18
} else {
19
Log.i(TAG_GET, "Get方式请求失败");
20
}
21
// 关闭连接
22
urlConn.disconnect();
23
}
Post方式:
01
// Post方式请求
02
public static void requestByPost() throws Throwable {
03
String path = "https://reg.163.com/logins.jsp";
04
// 请求的参数转换为byte数组
05
String params = "id=" + URLEncoder.encode("helloworld", "UTF-8")
06
+ "&pwd=" + URLEncoder.encode("android", "UTF-8");
07
byte[] postData = params.getBytes();
08
// 新建一个URL对象
09
URL url = new URL(path);
10
// 打开一个HttpURLConnection连接
11
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
12
// 设置连接超时时间
13
urlConn.setConnectTimeout(5 * 1000);
14
// Post请求必须设置允许输出
15
urlConn.setDoOutput(true);
16
// Post请求不能使用缓存
17
urlConn.setUseCaches(false);
18
// 设置为Post请求
19
urlConn.setRequestMethod("POST");
20
urlConn.setInstanceFollowRedirects(true);
21
// 配置请求Content-Type
22
urlConn.setRequestProperty("Content-Type",
23
"application/x-www-form-urlencode");
24
// 开始连接
25
urlConn.connect();
26
// 发送请求参数
27
DataOutputStream dos = new DataOutputStream(urlConn.getOutputStream());
28
dos.write(postData);
29
dos.flush();
30
dos.close();
31
// 判断请求是否成功
32
if (urlConn.getResponseCode() == HTTP_200) {
33
// 获取返回的数据
34
byte[] data = readStream(urlConn.getInputStream());
35
Log.i(TAG_POST, "Post请求方式成功,返回数据如下:");
36
Log.i(TAG_POST, new String(data, "UTF-8"));
37
} else {
38
Log.i(TAG_POST, "Post方式请求失败");
39
}
40
}
org.apache.http包中的HttpGet和HttpPost类
Get方式:
01
// HttpGet方式请求
02
public static void requestByHttpGet() throws Exception {
03
String path = "https://reg.163.com/logins.jsp?id=helloworld&pwd=android";
04
// 新建HttpGet对象
05
HttpGet httpGet = new HttpGet(path);
06
// 获取HttpClient对象
07
HttpClient httpClient = new DefaultHttpClient();
08
// 获取HttpResponse实例
09
HttpResponse httpResp = httpClient.execute(httpGet);
10
// 判断是够请求成功
11
if (httpResp.getStatusLine().getStatusCode() == HTTP_200) {
12
// 获取返回的数据
13
String result = EntityUtils.toString(httpResp.getEntity(), "UTF-8");
14
Log.i(TAG_HTTPGET, "HttpGet方式请求成功,返回数据如下:");
15
Log.i(TAG_HTTPGET, result);
16
} else {
17
Log.i(TAG_HTTPGET, "HttpGet方式请求失败");
18
}
19
}
Post方式:
01
// HttpPost方式请求
02
public static void requestByHttpPost() throws Exception {
03
String path = "https://reg.163.com/logins.jsp";
04
// 新建HttpPost对象
05
HttpPost httpPost = new HttpPost(path);
06
// Post参数
07
List<NameValuePair> params = new ArrayList<NameValuePair>();
08
params.add(new BasicNameValuePair("id", "helloworld"));
09
params.add(new BasicNameValuePair("pwd", "android"));
10
// 设置字符集
11
HttpEntity entity = new UrlEncodedFormEntity(params, HTTP.UTF_8);
12
// 设置参数实体
13
httpPost.setEntity(entity);
14
// 获取HttpClient对象
15
HttpClient httpClient = new DefaultHttpClient();
16
// 获取HttpResponse实例
17
HttpResponse httpResp = httpClient.execute(httpPost);
18
// 判断是够请求成功
19
if (httpResp.getStatusLine().getStatusCode() == HTTP_200) {
20
// 获取返回的数据
21
String result = EntityUtils.toString(httpResp.getEntity(), "UTF-8");
22
Log.i(TAG_HTTPGET, "HttpPost方式请求成功,返回数据如下:");
23
Log.i(TAG_HTTPGET, result);
24
} else {
25
Log.i(TAG_HTTPGET, "HttpPost方式请求失败");
26
}
27
}