在Android SDK 中 可以采取多种方式使用HTTP
eg:HttpURLConnection HttpGet HttpPost and so on... 下面就开始初略的介绍一下:
在Android SDK 中集成了Apache HttpClient 模块,但是 注意:这里的 Apache HttpClient 模块是HttpClient4.0(org.apache.http.*)
一) HttpClient模块中涉及到两个重要的类:一个是HttpGet and HttpPost
用这两个类来提交请求、
无论用get 还是 post 他们的 步骤 不外乎以下几步:
a) 创建HttpGet或HttpPost 对象,将要请求的URL通过构造方法传入HttpGet或HttpPost对象
b) 使用DefaultHttpClient类的execute方法发送HTTP Get 或 HTTP Post 请求,并返回HttpResponse对象
c) 通过HttpResponse 接口的getEntity 方法返回响应信息,并进行相应的处理
当然 使用 Post 会比较麻烦, 必须使用HttpPost类的setEntity方法给他设置参数
HttpGet 请求代码:
HttpClient mClient = new DefaultHttpClient();
// 这个是你机器的ip,访问的是一张图
HttpGet request= new HttpGet("http://192.168.1.121:80/a2.png");
try {
HttpResponse response = mClient .execute(request);
if (response.getStatusLine().getStatusCode() == 200) {
// 这样 得到一个输入流
InputStream is = response.getEntity().getContent(); //把通过BitmapFactory 把流转化成一个bitmap对象
Bitmap bitmap = BitmapFactory.decodeStream(is);
mImageView.setImageBitmap(bitmap);
} else {
mImageView.setImageResource(R.drawable.ic_launcher);
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} HttpPost 请求的代码样例:
HttpClient client2 = new DefaultHttpClient();
HttpPost post = new HttpPost(
"http://192.168.1.121:8080/MyServlet/queryServlet");//设置HTTP POST请求参数必须用NameValuePair对象
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("name", "Mars"));
try {
post.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
HttpResponse response = client2.execute(post);
if (response.getStatusLine().getStatusCode() == 200) {
String str = EntityUtils.toString(response.getEntity());
mTextView.setText(str);
} else {
mTextView.setText("连接失败");
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
get请求 和post请求有什么区别呢?
1. get是从服务器上获取数据,post是向服务器传送数据。
2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
3. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
4. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
5. get安全性非常低,post安全性较高。但是执行效率却
当然建议:
1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式;
2、在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式;
HttpURLConnection类
java.net.HttpURLConnection 类是另一种访问HTTP资源的方式
而且HttpURLConnection 具有完全的访问能力, 可以取代HttpGet 和HttpPost
使用HttpURLConnection 访问的步骤如下:
a) 使用java.net.URL 封装的HTTP资源的url,并且使用openConnection 方法获得HttpUrlConnection对象:
eg: URL url = new URL(""http://192.168.1.121:8080/a2.png");
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
b) 设置请求方法,eg:GET, POST 等等
conn.setRequestMethod("POST"); // note :参数必须大写
c) z 设置输入输出和其他权限
// 下载资源,需要将setDoInput方法的参数设为true
conn.setDoInput(true);
// 上传数据 将setDoOutput 方法的参数设为true
conn.setDoOutput(true);
// 禁止使用缓存:
conn.setUseCaches(true);
这里就不多说了,都是API的使用;
d) 设置HTTP请求头
eg:conn.setRequestProperty("Charser",UTF-8);
e) 输入 输出数据:这里就是资源的读写操作,那就要用到I/O 了
eg: InputStream is = conn.getInputStream();
OutputStream os = conn.getOutpustStream();
f) 流用完了 别忘了关哦:
is.close();
os.close();