Android Http访问网络

在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 block
			e.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 block
			e.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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值