您的位置:首页 > 理论基础 > 计算机网络

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

2014-12-25 14:14 1201 查看
使用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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: