<p><span style="font-size:14px;">Android应用经常会和服务器端交互,这就需要手机客户端发送网络请求,下面介绍四种常用网络请求方式,我这边是通过Android单元测试来完成这四种方法的,还不清楚Android的单元测试的同学们请看</span><a target=_blank href="http://blog.csdn.net/zuolongsnail/archive/2011/04/21/6338366.aspx"><span style="font-size:14px;">Android开发技巧总结</span></a><span style="font-size:14px;">中的Android单元测试的步骤一文。</span></p><p><span style="color:#0000ff;"><span style="font-size:14px;">java.net包中的HttpURLConnection类</span></span></p><p><span style="color:#ff0000;"><span style="font-size:14px;">Get方式:</span></span></p><p><span style="color:#ff0000;"><span style="font-size:12px;"></span></span><div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><strong>[java]</strong> <a target=_blank class="ViewSource" title="view plain" href="http://blog.csdn.net/zuolongsnail/article/details/6373051#">view plain</a><a target=_blank class="CopyToClipboard" title="copy" href="http://blog.csdn.net/zuolongsnail/article/details/6373051#">copy</a><div style="Z-INDEX: 99; POSITION: absolute; WIDTH: 18px; HEIGHT: 18px; TOP: 616px; LEFT: 547px"><embed id="ZeroClipboardMovie_1" height="18" name="ZeroClipboardMovie_1" type="application/x-shockwave-flash" align="middle" pluginspage="http://www.macromedia.com/go/getflashplayer" width="18" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" allownetworking="all" loop="false" menu="false" quality="best" bgcolor="#ffffff" allowscriptaccess="always" allowfullscreen="true" flashvars="id=1&width=18&height=18" wmode="transparent" /></div></div></div><ol class="dp-j"><li class="alt"><span><span class="comment">// Get方式请求</span><span> </span></span></li><li><span><span class="keyword">public</span><span> </span><span class="keyword">static</span><span> </span><span class="keyword">void</span><span> requestByGet() </span><span class="keyword">throws</span><span> Exception { </span></span></li><li class="alt"><span> String path = <span class="string">"https://reg.163.com/logins.jsp?id=helloworld&pwd=android"</span><span>; </span></span></li><li><span> <span class="comment">// 新建一个URL对象</span><span> </span></span></li><li class="alt"><span> URL url = <span class="keyword">new</span><span> URL(path); </span></span></li><li><span> <span class="comment">// 打开一个HttpURLConnection连接</span><span> </span></span></li><li class="alt"><span> HttpURLConnection urlConn = (HttpURLConnection) url.openConnection(); </span></li><li><span> <span class="comment">// 设置连接超时时间</span><span> </span></span></li><li class="alt"><span> urlConn.setConnectTimeout(<span class="number">5</span><span> * </span><span class="number">1000</span><span>); </span></span></li><li><span> <span class="comment">// 开始连接</span><span> </span></span></li><li class="alt"><span> urlConn.connect(); </span></li><li><span> <span class="comment">// 判断请求是否成功</span><span> </span></span></li><li class="alt"><span> <span class="keyword">if</span><span> (urlConn.getResponseCode() == HTTP_200) { </span></span></li><li><span> <span class="comment">// 获取返回的数据</span><span> </span></span></li><li class="alt"><span> <span class="keyword">byte</span><span>[] data = readStream(urlConn.getInputStream()); </span></span></li><li><span> Log.i(TAG_GET, <span class="string">"Get方式请求成功,返回数据如下:"</span><span>); </span></span></li><li class="alt"><span> Log.i(TAG_GET, <span class="keyword">new</span><span> String(data, </span><span class="string">"UTF-8"</span><span>)); </span></span></li><li><span> } <span class="keyword">else</span><span> { </span></span></li><li class="alt"><span> Log.i(TAG_GET, <span class="string">"Get方式请求失败"</span><span>); </span></span></li><li><span> } </span></li><li class="alt"><span> <span class="comment">// 关闭连接</span><span> </span></span></li><li><span> urlConn.disconnect(); </span></li><li class="alt"><span>} </span></li></ol></div></p><p></p><p></p><p><span style="color:#ff0000;"><span style="font-size:14px;">Post方式:</span></span></p><p><span style="color:#ff0000;"><span style="font-size:12px;"></span></span><div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><strong>[java]</strong> <a target=_blank class="ViewSource" title="view plain" href="http://blog.csdn.net/zuolongsnail/article/details/6373051#">view plain</a><a target=_blank class="CopyToClipboard" title="copy" href="http://blog.csdn.net/zuolongsnail/article/details/6373051#">copy</a><div style="Z-INDEX: 99; POSITION: absolute; WIDTH: 18px; HEIGHT: 18px; TOP: 1125px; LEFT: 547px"><embed id="ZeroClipboardMovie_2" height="18" name="ZeroClipboardMovie_2" type="application/x-shockwave-flash" align="middle" pluginspage="http://www.macromedia.com/go/getflashplayer" width="18" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" allownetworking="all" loop="false" menu="false" quality="best" bgcolor="#ffffff" allowscriptaccess="always" allowfullscreen="true" flashvars="id=2&width=18&height=18" wmode="transparent" /></div></div></div><ol class="dp-j"><li class="alt"><span><span class="comment">// Post方式请求</span><span> </span></span></li><li><span><span class="keyword">public</span><span> </span><span class="keyword">static</span><span> </span><span class="keyword">void</span><span> requestByPost() </span><span class="keyword">throws</span><span> Throwable { </span></span></li><li class="alt"><span> String path = <span class="string">"https://reg.163.com/logins.jsp"</span><span>; </span></span></li><li><span> <span class="comment">// 请求的参数转换为byte数组</span><span> </span></span></li><li class="alt"><span> String params = <span class="string">"id="</span><span> + URLEncoder.encode(</span><span class="string">"helloworld"</span><span>, </span><span class="string">"UTF-8"</span><span>) </span></span></li><li><span> + <span class="string">"&pwd="</span><span> + URLEncoder.encode(</span><span class="string">"android"</span><span>, </span><span class="string">"UTF-8"</span><span>); </span></span></li><li class="alt"><span> <span class="keyword">byte</span><span>[] postData = params.getBytes(); </span></span></li><li><span> <span class="comment">// 新建一个URL对象</span><span> </span></span></li><li class="alt"><span> URL url = <span class="keyword">new</span><span> URL(path); </span></span></li><li><span> <span class="comment">// 打开一个HttpURLConnection连接</span><span> </span></span></li><li class="alt"><span> HttpURLConnection urlConn = (HttpURLConnection) url.openConnection(); </span></li><li><span> <span class="comment">// 设置连接超时时间</span><span> </span></span></li><li class="alt"><span> urlConn.setConnectTimeout(<span class="number">5</span><span> * </span><span class="number">1000</span><span>); </span></span></li><li><span> <span class="comment">// Post请求必须设置允许输出</span><span> </span></span></li><li class="alt"><span> urlConn.setDoOutput(<span class="keyword">true</span><span>); </span></span></li><li><span> <span class="comment">// Post请求不能使用缓存</span><span> </span></span></li><li class="alt"><span> urlConn.setUseCaches(<span class="keyword">false</span><span>); </span></span></li><li><span> <span class="comment">// 设置为Post请求</span><span> </span></span></li><li class="alt"><span> urlConn.setRequestMethod(<span class="string">"POST"</span><span>); </span></span></li><li><span> urlConn.setInstanceFollowRedirects(<span class="keyword">true</span><span>); </span></span></li><li class="alt"><span> <span class="comment">// 配置请求Content-Type</span><span> </span></span></li><li><span> urlConn.setRequestProperty(<span class="string">"Content-Type"</span><span>, </span></span></li><li class="alt"><span> <span class="string">"application/x-www-form-urlencode"</span><span>); </span></span></li><li><span> <span class="comment">// 开始连接</span><span> </span></span></li><li class="alt"><span> urlConn.connect(); </span></li><li><span> <span class="comment">// 发送请求参数</span><span> </span></span></li><li class="alt"><span> DataOutputStream dos = <span class="keyword">new</span><span> DataOutputStream(urlConn.getOutputStream()); </span></span></li><li><span> dos.write(postData); </span></li><li class="alt"><span> dos.flush(); </span></li><li><span> dos.close(); </span></li><li class="alt"><span> <span class="comment">// 判断请求是否成功</span><span> </span></span></li><li><span> <span class="keyword">if</span><span> (urlConn.getResponseCode() == HTTP_200) { </span></span></li><li class="alt"><span> <span class="comment">// 获取返回的数据</span><span> </span></span></li><li><span> <span class="keyword">byte</span><span>[] data = readStream(urlConn.getInputStream()); </span></span></li><li class="alt"><span> Log.i(TAG_POST, <span class="string">"Post请求方式成功,返回数据如下:"</span><span>); </span></span></li><li><span> Log.i(TAG_POST, <span class="keyword">new</span><span> String(data, </span><span class="string">"UTF-8"</span><span>)); </span></span></li><li class="alt"><span> } <span class="keyword">else</span><span> { </span></span></li><li><span> Log.i(TAG_POST, <span class="string">"Post方式请求失败"</span><span>); </span></span></li><li class="alt"><span> } </span></li><li><span>} </span></li></ol></div> </p><p></p><p></p><p><span style="color:#ff0000;"></span></p><p><span style="color:#0000ff;"><span style="font-size:14px;">org.apache.http包中的HttpGet和HttpPost类</span></span></p><p></p><p><span style="color:#0000ff;"><span style="font-size:12px;"></span></span></p><p><span style="color:#ff0000;"><span style="font-size:14px;">Get方式:</span></span></p><p></p><p><span style="color:#ff0000;"><span style="font-size:12px;"></span></span><div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><strong>[java]</strong> <a target=_blank class="ViewSource" title="view plain" href="http://blog.csdn.net/zuolongsnail/article/details/6373051#">view plain</a><a target=_blank class="CopyToClipboard" title="copy" href="http://blog.csdn.net/zuolongsnail/article/details/6373051#">copy</a><div style="Z-INDEX: 99; POSITION: absolute; WIDTH: 18px; HEIGHT: 18px; TOP: 2020px; LEFT: 547px"><embed id="ZeroClipboardMovie_3" height="18" name="ZeroClipboardMovie_3" type="application/x-shockwave-flash" align="middle" pluginspage="http://www.macromedia.com/go/getflashplayer" width="18" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" allownetworking="all" loop="false" menu="false" quality="best" bgcolor="#ffffff" allowscriptaccess="always" allowfullscreen="true" flashvars="id=3&width=18&height=18" wmode="transparent" /></div></div></div><ol class="dp-j"><li class="alt"><span><span class="comment">// HttpGet方式请求</span><span> </span></span></li><li><span><span class="keyword">public</span><span> </span><span class="keyword">static</span><span> </span><span class="keyword">void</span><span> requestByHttpGet() </span><span class="keyword">throws</span><span> Exception { </span></span></li><li class="alt"><span> String path = <span class="string">"https://reg.163.com/logins.jsp?id=helloworld&pwd=android"</span><span>; </span></span></li><li><span> <span class="comment">// 新建HttpGet对象</span><span> </span></span></li><li class="alt"><span> HttpGet httpGet = <span class="keyword">new</span><span> HttpGet(path); </span></span></li><li><span> <span class="comment">// 获取HttpClient对象</span><span> </span></span></li><li class="alt"><span> HttpClient httpClient = <span class="keyword">new</span><span> DefaultHttpClient(); </span></span></li><li><span> <span class="comment">// 获取HttpResponse实例</span><span> </span></span></li><li class="alt"><span> HttpResponse httpResp = httpClient.execute(httpGet); </span></li><li><span> <span class="comment">// 判断是够请求成功</span><span> </span></span></li><li class="alt"><span> <span class="keyword">if</span><span> (httpResp.getStatusLine().getStatusCode() == HTTP_200) { </span></span></li><li><span> <span class="comment">// 获取返回的数据</span><span> </span></span></li><li class="alt"><span> String result = EntityUtils.toString(httpResp.getEntity(), <span class="string">"UTF-8"</span><span>); </span></span></li><li><span> Log.i(TAG_HTTPGET, <span class="string">"HttpGet方式请求成功,返回数据如下:"</span><span>); </span></span></li><li class="alt"><span> Log.i(TAG_HTTPGET, result); </span></li><li><span> } <span class="keyword">else</span><span> { </span></span></li><li class="alt"><span> Log.i(TAG_HTTPGET, <span class="string">"HttpGet方式请求失败"</span><span>); </span></span></li><li><span> } </span></li><li class="alt"><span>} </span></li></ol></div></p><p></p><p></p><p><span style="color:#ff0000;"><span style="font-size:14px;">Post方式:</span></span></p><p><span style="color:#ff0000;"><span style="font-size:12px;"></span></span><div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><strong>[java]</strong> <a target=_blank class="ViewSource" title="view plain" href="http://blog.csdn.net/zuolongsnail/article/details/6373051#">view plain</a><a target=_blank class="CopyToClipboard" title="copy" href="http://blog.csdn.net/zuolongsnail/article/details/6373051#">copy</a><div style="Z-INDEX: 99; POSITION: absolute; WIDTH: 18px; HEIGHT: 18px; TOP: 2457px; LEFT: 547px"><embed id="ZeroClipboardMovie_4" height="18" name="ZeroClipboardMovie_4" type="application/x-shockwave-flash" align="middle" pluginspage="http://www.macromedia.com/go/getflashplayer" width="18" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" allownetworking="all" loop="false" menu="false" quality="best" bgcolor="#ffffff" allowscriptaccess="always" allowfullscreen="true" flashvars="id=4&width=18&height=18" wmode="transparent" /></div></div></div><ol class="dp-j"><li class="alt"><span><span class="comment">// HttpPost方式请求</span><span> </span></span></li><li><span><span class="keyword">public</span><span> </span><span class="keyword">static</span><span> </span><span class="keyword">void</span><span> requestByHttpPost() </span><span class="keyword">throws</span><span> Exception { </span></span></li><li class="alt"><span> String path = <span class="string">"https://reg.163.com/logins.jsp"</span><span>; </span></span></li><li><span> <span class="comment">// 新建HttpPost对象</span><span> </span></span></li><li class="alt"><span> HttpPost httpPost = <span class="keyword">new</span><span> HttpPost(path); </span></span></li><li><span> <span class="comment">// Post参数</span><span> </span></span></li><li class="alt"><span> List<NameValuePair> params = <span class="keyword">new</span><span> ArrayList<NameValuePair>(); </span></span></li><li><span> params.add(<span class="keyword">new</span><span> BasicNameValuePair(</span><span class="string">"id"</span><span>, </span><span class="string">"helloworld"</span><span>)); </span></span></li><li class="alt"><span> params.add(<span class="keyword">new</span><span> BasicNameValuePair(</span><span class="string">"pwd"</span><span>, </span><span class="string">"android"</span><span>)); </span></span></li><li><span> <span class="comment">// 设置字符集</span><span> </span></span></li><li class="alt"><span> HttpEntity entity = <span class="keyword">new</span><span> UrlEncodedFormEntity(params, HTTP.UTF_8); </span></span></li><li><span> <span class="comment">// 设置参数实体</span><span> </span></span></li><li class="alt"><span> httpPost.setEntity(entity); </span></li><li><span> <span class="comment">// 获取HttpClient对象</span><span> </span></span></li><li class="alt"><span> HttpClient httpClient = <span class="keyword">new</span><span> DefaultHttpClient(); </span></span></li><li><span> <span class="comment">// 获取HttpResponse实例</span><span> </span></span></li><li class="alt"><span> HttpResponse httpResp = httpClient.execute(httpPost); </span></li><li><span> <span class="comment">// 判断是够请求成功</span><span> </span></span></li><li class="alt"><span> <span class="keyword">if</span><span> (httpResp.getStatusLine().getStatusCode() == HTTP_200) { </span></span></li><li><span> <span class="comment">// 获取返回的数据</span><span> </span></span></li><li class="alt"><span> String result = EntityUtils.toString(httpResp.getEntity(), <span class="string">"UTF-8"</span><span>); </span></span></li><li><span> Log.i(TAG_HTTPGET, <span class="string">"HttpPost方式请求成功,返回数据如下:"</span><span>); </span></span></li><li class="alt"><span> Log.i(TAG_HTTPGET, result); </span></li><li><span> } <span class="keyword">else</span><span> { </span></span></li><li class="alt"><span> Log.i(TAG_HTTPGET, <span class="string">"HttpPost方式请求失败"</span><span>); </span></span></li><li><span> } </span></li><li class="alt"><span>} </span></li></ol></div></p><p></p><p></p><p><span style="COLOR: #ff0000"><span style="font-size:12px;"><span style="color:#000000;"><span style="font-size:14px;">以上是一些部分代码,测试的时候在测试类中运行对应的测试方法即可。</span></span></span></span></p>
<span style="font-size:14px;">package com.example.shezhi; import java.io.IOException; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.NameValuePair; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.utils.URLEncodedUtils; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; public class Update { String res=" "; int ites; String version="1"; ///////////////////////////////////////////////////////////////////////////////////////// public String getupdate(){ //先将参数放入List,再对参数进行URL编码 List<BasicNameValuePair> params = new LinkedList<BasicNameValuePair>(); params.add(new BasicNameValuePair("param1", "1")); params.add(new BasicNameValuePair("param2", "value2")); //对参数编码 String param = URLEncodedUtils.format(params, "UTF-8"); //baseUrl String baseUrl = "http://******/index1.jsp"; //将URL与参数拼接 HttpGet getMethod = new HttpGet(baseUrl + "?" + param); HttpClient httpClient = new DefaultHttpClient(); try { HttpResponse response = httpClient.execute(getMethod); res="已经请求"; } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //发起GET请求 try { HttpResponse response = httpClient.execute(getMethod); //发起GET请求 ites=response.getStatusLine().getStatusCode(); //获取响应码 System.out.println(ites+"aaa"); res="1213"+EntityUtils.toString(response.getEntity(), "utf-8");//获取服务器响应内容 System.out.println(res+"vvv"); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return res; } /******************************************************************************************** /** * HttpClient Post方法 * @return */ public String Postupdate(){ String urlPath="http://******/index1.jsp"; String realPath=urlPath.replaceAll(" ", "");//把多余的空格替换掉 HttpPost httpRequest=new HttpPost(realPath); // 添加要传递的参数 List<NameValuePair> params = new ArrayList<NameValuePair>(); NameValuePair pair1 = new BasicNameValuePair("username", "gzw"); NameValuePair pair2 = new BasicNameValuePair("password", "123"); params.add(pair1); params.add(pair2); try { // 设置字符集 HttpEntity httpentity = new UrlEncodedFormEntity(params, "utf-8"); // 请求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()); res=strResult; } else { res="失败"; } }catch (Exception e) { e.printStackTrace(); } return res; } /********************************************************************************************/ /** * 调用java类 get方法 */ public String get_update(){ String urlPath="http://******/index1.jsp"+"?type=save&version="+version+""; String realPath=urlPath.replaceAll(" ", "");//把多余的空格替换掉 try { if(getRequest(realPath)) { //成功 res="成功"; } }catch (Exception e) { res="失败"; } return res; } /** * java类 get方法 * @return */ //get请求,有文件长度大小限制 public static boolean getRequest(String urlPath) throws Exception { URL url=new URL(urlPath); HttpURLConnection con=(HttpURLConnection)url.openConnection(); con.setRequestMethod("GET"); con.setReadTimeout(5*1000); if(con.getResponseCode()==200) { return true; } return false; } /******************************************************************************************** /** * 调用下面java类 Post方法 * @return */ public String post_update(){ String urlPath="http://www.gdhdcy.com/hdleague1/index1.jsp"; Map<String,String> map=new HashMap<String,String>();//用集合来做,比字符串拼接来得直观 map.put("type", "save"); map.put("version", version); try { if(postRequest(urlPath,map)) { //成功 res="成功"; } }catch (Exception e) { res="失败"; } return res; } /** * java类 post方法 * @return */ //post请求,无文件长度大小限制 public static boolean postRequest(String urlPath,Map<String,String> map) throws Exception { StringBuilder builder=new StringBuilder(); //拼接字符 //拿出键值 if(map!=null && !map.isEmpty()) { for(Map.Entry<String, String> param:map.entrySet()) { builder.append(param.getKey()).append('=').append(URLEncoder.encode(param.getValue(), "utf-8")).append('&'); } builder.deleteCharAt(builder.length()-1); } //下面的Content-Length: 是这个URL的二进制数据长度 byte b[]=builder.toString().getBytes(); URL url=new URL(urlPath); HttpURLConnection con=(HttpURLConnection)url.openConnection(); con.setRequestMethod("POST"); con.setReadTimeout(5*1000); con.setDoOutput(true);//打开向外输出 con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");//内容类型 con.setRequestProperty("Content-Length",String.valueOf(b.length));//长度 OutputStream outStream=con.getOutputStream(); outStream.write(b);//写入数据 outStream.flush();//刷新内存 outStream.close(); //状态码是不成功 if(con.getResponseCode()==200) { return true; } return false; } } </span>