2015年7月24日星期五

使用HTTP协议访问网络之HttpURLConnection

Android中发送HTTP请求的方式一般有两种,HttpURLConnection和HttpClient,我分别实践了一下。

一、使用HttpURLConnection

首先需要获取到HttpURLConnection的实例——new出一个URL对象,传入目标的网络地址,调用openConnection()方法,如下:

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

得到HttpURLConnection实例后,设置HTTP请求所使用的方法,常用有两种,GET和POST。GET表示从服务器获取数据,POST相反,表示提交数据给服务器。

connection.setRequestMethod("GET"); //或POST

其他设置,

connection.setConnecTimeout(1000); //设置连接超时的毫秒数
connection.setReadTimeout(1000); //设置读取超时的毫秒数

调用getInputStream()方法获取服务器返回的输入流,并对输入流进行读取,

InputStream in = connection.getInputStream();

最后,调用disconnect()方法关闭此HTTP连接。

connection.disconnection();

如上是GET的简单用法,那么再来一个POST的完整例子吧。


//提交数据给服务器。获取输入流之前把药提交的数据写出即可
URL url = new URL("http://www.baidu.com");
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST"); 
DataOutputStream out= new DataOutputStream(connection.getOutputStream());
out.writeBytes("username=admin&&&password=123456");//提交账号和密码

注意,要提交的数据要以键值对的形式存在,数据与数据之间用&隔开

LOL!

最后,来一个完整的例子,

private void sendRequestWithHttpUrlConnection() {
// 开启线程来发起网络请求 子线程
new Thread(new Runnable() {
@Override
public void run() {
HttpURLConnection connection = null;
try {
URL url = new URL("http://www.baidu.com");
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");// SET表示希望从服务器那里获取数据,POST表示希望提交数据给服务器
connection.setConnectTimeout(8000);// 设置连接超时
connection.setReadTimeout(8000);// 读取超时的毫秒数
InputStream in = connection.getInputStream();// 获取服务器返回的输入流
/*
* 提交数据给服务器。获取输入流之前把药提交的数据写出即可
* connection.setRequestMethod("POST"); 
* DataOutputStream out= new DataOutputStream(connection.getOutputStream());
* out.writeBytes("username=admin&&&password=123456");
* 数据以键值对形式存在
*/
// 下面对获取到的输入流进行读取
BufferedReader reader = new BufferedReader(
new InputStreamReader(in));
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
Message message = new Message();
message.what = SHOW_RESPONSE;
// 将服务器返回的结果存放到Message中
message.obj = response.toString();
handler.sendMessage(message);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (connection != null) {
connection.disconnect();// 将HTTP链接关闭掉
}
}
}
}).start();

}

LOL!

没有评论:

发表评论