Android Http访问网络

来源:互联网 发布:数据采集器作用 编辑:程序博客网 时间:2024/05/18 06:19

在android 访问 移动互联网 的方式一般我们用Http的请求方式, Http 进行网络通信中有两种方式: 一种是使用HttpUrLConnection实现,另一种使用HttpClient。下面就分别来介绍这两种Http的请求方式:


再说Http前,要注意的是对于访问网络操作之前一定要做的就是,在AndroidManifest.xml文件中指定允许访问网络资源的权限:

<span style="font-size:18px;color:#ff0000;"><uses-permission android:name="android.permission.INTERNET" /></span>


使用HttpURLConnection访问网络:


 HttpURLConnection类位于java.net包中,用于发送Http请求和获取 Http响应。由于该类是抽象类, 不能直接实例化对象,则需要使用URL的openConnection()方法来获得。列如,要创建http://www.mingribook.com网站对应的HttpURLConnection对象,可以使用以下代码:

URL url = new URL("http://www.mingribook.com/");HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

HttpURLConnection 创建后,就可以使用该对象发送HTTP请求了,HTTP请求通常分为GET和POST两种方式。下面分别进行介绍:

 1. 发送GET请求:

    使用HttpURLConnection 对象发送请求时,默认发送的就是GET请求。因此,发送GET请求比较简单,只需要指定链接地址时,先将传递的参数通过“?参数名 = 参数值&参数名 = 参数值”  或 “?参数名 = 参数值,参数名 = 参数值” ,追加到请求的链接的后面就可以了. 下面通过一个具体的实例来说明如何使用HttpURLConnection的Get请求方式:


<span style="white-space:pre"></span>String name = "keyang";<span style="white-space:pre"></span>//要访问的URL地址try {URL url = new URL(target); //创建URL对象HttpURLConnection  urlConn = (HttpURLConnection) url.openConnection();  //创建一个HTTP连接对象urlConn.connect();  //连接服务器if(urlConn.getResponseCode() == HttpURLConnection.HTTP_OK){  // 比较响应码是否为正常响应InputStreamReader in = new InputStreamReader(urlConn.getInputStream());  //获取服务器的响应流BufferedReader br = new BufferedReader(in); //读取服务器的响应流String inputLen = ""; while((inputLen = br.readLine())!=null){Log.i("Test",inputLen);}in.close();  //关闭输入流urlConn.disconnect(); //断开与服务器的连接}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}

    2. 发送POST请求

   由于采用GET方式发送请求只适合发送大小在1024个字节以内的数据,所以当要发送的数据较大时,就需要使用POST方式来发送请求。在Android 中,使用HttpURLConnection 类发送请求时,默认采用的是GET请求,如果发送POST请求,需要通过其 setRequestMethod()方法进行指定。例如,创建一个HTTP连接,并为该连接指定请求的发送方式为POST, 可以使用下面的代码:

<span style="white-space:pre"></span>URL url = new URL("http://www.baidu.com");HttpURLConnection urlConn = url.openConnection();urlConn.setRequestMethod("POST");  //其参数值 的GET和POST一定是要大写


发送POST请求比发送GET 请求要复杂一些,它经常需要通过HttpURLConnection的类及其父类URLConnection提供的方法进行设置相关的类容,下面就是发送POST请求时常用的方法:


setDoInput(boolean newValue) 

 用于设置是否向连接中写入数据,如果参数值为true,表示写入数据;否则不写入数据;


setDoOutput(boolean newValue)

 用于设置是否从连接中读取数据, 如果参数值为true ,表示读取数据;否则不读取数据;


setUseCaches(boolean newValue)

 用于设置是否缓存数据,如果参数值为true,表示缓存数据;否则表示禁用缓存;


setInstanceFollowRedirects(booleran followRedirects)

 用于设置是否应该自动执行HTTP重定向,参数值为true时,表示自动执行;否则不自动执行;


setRequestProperty(String field,String newValue)

 用于设置一般请求属性,例如,要设置内容类型为表单数据,可以进行一下设置setRequestProperty("Content-Type","application/x-www-form-urlencoded");



下面通过一个实例来介绍如何使用HttpURLConnection类发送POST请求 :


String target = "http://192.168.1.66:8081/blog/index.jsp"; try {URL url = new URL(target);  //获取URL对象HttpURLConnection urlConn = (HttpURLConnection) url.openConnection(); //创建一个HTTP连接urlConn.setRequestMethod("POST");  //指定HTTP 使用POST的请求方式urlConn.setUseCaches(false);  // 禁止缓存urlConn.setDoInput(true);  //向连接中写入数据urlConn.setDoOutput(true);  //从连接中读取数据urlConn.setInstanceFollowRedirects(true);  //自动执行HTTP重定向urlConn.setRequestProperty("Content-Type","application/x-www-form-urlencoded" ); //设置内容类型DataOutputStream out = new DataOutputStream(urlConn.getOutputStream());//获取输出流String param = "nickname="+URLEncoder.encode("keyang","utf-8")+"&content="+     URLEncoder.encode("你有未接电话","utf-8");  //连接要提交的数据out.writeBytes(param);  //将要传递的数据写入数据输出流out.flush();  //输出缓存out.close(); // 关闭数据输出流//判断是否响应成功if(urlConn.getResponseCode() == HttpURLConnection.HTTP_OK){InputStreamReader in = new InputStreamReader(urlConn.getInputStream()); //获得读取的内容BufferedReader buffer = new BufferedReader(in);  //获取输入流对象String inputLine = null;while( (inputLine = buffer.readLine()) != null){Log.i("Test",inputLine);}in.close();  //关闭字符输入流}urlConn.disconnect();//关闭与服务器的连接} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}



使用HttpClient访问网络:


 HttpClient 是Apache组织提供的,在Android中,已经成功的集成了HttpClient,所以可以直接在Android中使用HttpClient来访问网络。HttpClient实际上是对java提供的访问网络的方法进行了封装.HttpURLConnectionlei 中的输入/输出流操作,在HttpClient中被统一封装成了HttpGet,HttpPost 和 HttpResponse类,这样,就简化了操作。其中,HttpGet类代表发送GET请求;HttpPost类代表发送POST请求;HttpResponse类代表处理响应对象。

   同使用HttpURLConnection类一样,使用HttpClient发送HTTP请求也可以分为发送GET请求和POST请求两种,下面分别进行介绍.


 1. 发送GET请求

    同HttpURLConnection类一样,使用HttpClient 发送GET请求的方法也比较简单,大致可以分为以下几个步骤。

  (1) 创建HttpClient对象. 

   (2) 创建HttpGet对象

   (3)如果需要发送请求参数,可以直接将要发送的参数连接到URL地址中,也可以调用HttpGet的setParams()方法来添加请求参数。

   (4)调用HttpClient 对象的execute()方法发送请求。执行该方法将放回一个HttpResponse对象.

    (5)调用HttpResponse 的getEntity()方法,可获得包含服务器响应内容的HttpEntity对象,通过该对象可以获取服务器的响应内容。


   下面通过一个具体的实例来说明如何使用HttpClient来发送GET请求:


<span style="white-space:pre"></span>String target = "http://192.168.1.66:8081/blog/index.jsp?parm=get"; String result = "";//服务器响应的信息try {URL url = new URL(target);  //获取URL对象HttpClient httpclient = new DefaultHttpClient(); //创建HttpClient对象HttpGet httpRequest = new HttpGet(target); // 创建HttpGet链接对象HttpResponse httpResponse = httpclient.execute(httpRequest); //执行HttpClient请求if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){result = EntityUtils.toString(httpResponse.getEntity()); //获取服务器返回的字符串 }else{result = "请求失败";}}catch(Exception e){e.printStackTrace();}

  2.发送POST请求

  

    同HttpURLConnection类一样,使用HttpClient 发送GET请求的方法也比较简单,大致可以分为以下几个步骤。

  (1) 创建HttpClient对象. 

   (2) 创建HttpPost对象

   (3)如果需要发送请求参数,可以调用HttpPost的setParams()方法来添加请求参数,也可以调用setEntity()方法来设置请求参数。

   (4)调用HttpClient 对象的execute()方法发送请求。执行该方法将放回一个HttpResponse对象.

    (5)调用HttpResponse 的getEntity()方法,可获得包含服务器响应内容的HttpEntity对象,通过该对象可以获取服务器的响应内容。


   下面通过一个具体的实例来说明如何使用HttpClient来发送POST请求:

   

String target = "http://192.168.1.66:8081/blog/index.jsp"; String result = "";//服务器响应的信息try {URL url = new URL(target);  //获取URL对象HttpClient httpclient = new DefaultHttpClient(); //创建HttpClient对象HttpPost httpRequest = new HttpPost(target); // 创建HttpPost链接对象//将要传递的参数保存到List集合中List<NameValuePair> params = new ArrayList<NameValuePair>();params.add(new BasicNameValuePair("param", "post")); //标记参数params.add(new BasicNameValuePair("nickname","keyang")); //昵称params.add(new BasicNameValuePair("content","你有未接电话"));  //内容httpRequest.setEntity(new UrlEncodedFormEntity(params,"utf-8")); //设置编码方式HttpResponse httpResponse = httpclient.execute(httpRequest); //执行HttpClient请求if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){result = EntityUtils.toString(httpResponse.getEntity()); //获取服务器返回的字符串 }else{result = "请求失败";}}catch(Exception e){e.printStackTrace();}

以上只是对Android 中网络访问 HTTP请求,简述的比较基础,相信HTTP还有很多要看,建议新手在看懂本片文章后,在去看一些稍微讲的有深度的文章,这将会对你有很大的帮助.



0 0
原创粉丝点击