Android学习使用HTTP协议访问网络

使用HttpURLConnection

1.首先要获得HttpURLConnection实例,一般需要new出一个URL对象并传入目标的网络地址,然后调用一下openConnection()方法。

<span style="font-family:Microsoft YaHei;font-size:14px;">URL url = new URL("http://www.baidu.com");
connection =(HttpURLConnection)url.openConnection();</span>

2.得到HttpURLConnection实例后,可以设置一下请求方式

<span style="font-family:Microsoft YaHei;font-size:14px;">connection.setRequestMethod("GET");</span>

还可以进行一些定制,如连接超时,读取超时的毫秒数

<span style="font-family:Microsoft YaHei;font-size:14px;">connection.setConnectTimeout(8000);
connection.setReadTimeout(8000);</span>


3.再调用getInputStream()方法就可以获取到服务器返回的输入流,剩下的任务就是对输入流进行读取

<span style="font-family:Microsoft YaHei;font-size:14px;">InputStream in =connection.getInputStream();</span>

4.最后可以调用disconnect()方法将这个HTTP连接关掉

<span style="font-family:Microsoft YaHei;font-size:14px;">connection.disconnect();</span>


一个完整的实例

<span style="font-family:Microsoft YaHei;font-size:14px;">	public static void sendHttpRequest(final String address,final HttpCallbackListener listener){
		
		new Thread(new Runnable() {
			
			@Override
			public void run() {
				HttpsURLConnection connection = null;
				try {
					URL url = new URL(address);
					connection =  (HttpsURLConnection) url.openConnection();
					connection.setRequestMethod("GET");
					connection.setConnectTimeout(5000);
					connection.setReadTimeout(5000);
					InputStream in = connection.getInputStream();
					BufferedReader reader = new BufferedReader(new InputStreamReader(in));
					StringBuilder respone = new StringBuilder();
					String line;
					while( (line =reader.readLine())!= null){
						respone.append(line);
					}
					if (listener !=null){
						listener.onFinish(respone.toString());
					}
				} catch (Exception e) {
					if (listener != null){
						listener.onError(e);
					}
				}finally{
					if (connection != null){
						connection.disconnect();
					}
				}
			}
		}).start();
		
	}</span>



使用HttpClient

1.HttpClient是一个接口无法创建实例,通常情况下会创建一个DefaultHttpClient实例

<span style="font-family:Microsoft YaHei;font-size:14px;">HttpClient httpClient = new DefaultHttpClient();</span>


2.如果想发起一条请求GET请求,可创建一个HttpGet对象,并传入目标网络的地址,然后调用HttpClient的execute()方法

<span style="font-family:Microsoft YaHei;font-size:14px;">HttpGet httpGet = new HttpGet("http://www.baidu.com");</span>
<span style="font-family:Microsoft YaHei;font-size:14px;">HttpResponse httpResponse = httpClient.execute(httpGet);
</span>

执行execute()方法后,会返回一个HttoResponse对象,服务器的信息都包含在里面,通常先取出服务器返回的状态码,如果等于200说明请求和响应都成功了

<span style="font-family:Microsoft YaHei;font-size:14px;">if (httpResponse.getStatusLine().getStatusCode()== 200){</span>
<span style="font-family:Microsoft YaHei;font-size:14px;"><span style="white-space:pre">	</span>//返回成功</span>
<span style="font-family:Microsoft YaHei;font-size:14px;">}</span>
在if内部取出服务器返回的具体内容,可调用getEntity()方法获取到一个HttpEntity实例,再用EntityUtils.toString()方法将HttpEntity转换为字符串

<span style="font-family:Microsoft YaHei;font-size:14px;">HttpEntity entity = httpResponse.getEntity();
String response = EntityUtils.toString(entity,"utf-8");</span>



完整实例如下:

<span style="font-family:Microsoft YaHei;font-size:14px;">	private void sendRequestWithHttpClient(){
		new Thread(new Runnable(){
			
			public void run(){
				try{
					HttpClient httpClient = new DefaultHttpClient();
					HttpGet httpGet = new HttpGet("http://192.168.1.102/get_data.xml");
					HttpResponse httpResponse = httpClient.execute(httpGet);
					if (httpResponse.getStatusLine().getStatusCode()== 200){
						HttpEntity entity = httpResponse.getEntity();
						String response = EntityUtils.toString(entity,"utf-8");
						Message message = new Message();
						message.what = SHOW_RESPONSE;
						message.obj = response.toString();
						handler.sendMessage(message);
					}
				}catch (IOException e){
					e.printStackTrace();
				}
			}
		}).start();
	}</span>







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值