标签:
1、概述
Web客户端(或浏览器)和服务器之间的交互用的是一个基于本文的应用级协议,叫做HTTP。
客户端利用TCP发起一个HTTP请求到服务器上指定端口(默认端口为80),服务器响应所请求的内容,并关闭连接。对于Web客户端和服务器而言,内容是与一个MIME类型相关的字节序列。常用的MIME(多用途的网际邮件扩充协议)类型有:text/html(HTML页面)、text/plain、application/postscript、image/gif、image/jpeg(JPEG格式编码的二进制图像)。
Web服务器以两种不同的方式向客户端提供内容:
*取一个磁盘文件,并讲它的内容返回给客户端,即服务静态内容。
*运行一个可执行文件,并将它的输出返回给客户端,即服务动态内容。
2、About URL
由上文可见Web服务器返回的内容都是和它管理的文件相关连的,而每一个文件都有一个唯一的名字,叫做URL(通用资源定位符)。
如,http://www.google.com:80/index.html 表示主机www.google.com上的一个名为index.html的HTML文件,它是由一个监听端口80的Web服务管理的。(那么问题来了,为啥只输入"http://www.google.com"也可以访问内容?因为浏览器在后面添加了"/",传给服务器后,服务器又拓展为某个默认的主页。而端口号是可选的,默认为80)。
可执行文件的URL可以在文件后包括程序参数,用"?"来分割文件名和参数,每个参数都用"&"字符分隔开。确定一个URL指向的是静态还是动态内容没有标准的规则。一种常见的方法是,将他们放在不同组目录下。
3、HTTP事务
3.1 HTTP请求,
在HTTP/1.0中只定义了GET、POST和HEAD三种方法(也叫“动作”),来操作指定的资源。
而HTTP/1.1协议将其扩展到了八种,包括:
其中GET和POST方法最为常见:
GET方法常用来取得HTML文档或图形,或根据用户提交的搜索项目取得搜索结果。GET请求在URL中向服务器发信息,如,fredzzt.cn/search?name=value&name1=value1。IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。
POST方法是将信息发送到服务器上,如验证码或从用户输入表单中收集的数据。POST方法以HTTP消息发送表单数据(而不是URL),由于将数据嵌入HTTP消息中,从而对用户隐藏更加安全。
二者的更多区别:http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html
3.2 HTTP响应
HTTP通过一个三位正整数,指明对请求的处理。常见的有404、400等。详见:http://zh.wikipedia.org/wiki/HTTP%E7%8A%B6%E6%80%81%E7%A0%81
4、Android的HTTP API
当你希望你的app连接到Internet时,你都需要在Manifest.xml中包含android.permission.INTERNET权限。
4.1 Apache HTTP客户端类
适合于Web浏览器,并且功能丰富。
包括DefaultHttpClient和AndroidHttpClient,二者主要有以下几点区别:首先,AndroidHttpClient是在2.2版本才引入的;其次,AndroidHttpClient容许SSL管理,有简单的方法来指定UserAgent;再次,他们的连接超时和套接字超时的默认值不同;最后,他们生成实例的方式不同,DefaultHttpClient client = new DefaultHttpClient(); AndroidHttpClient client = AndroidHttpClient.newInstance(null);
用DefaultHttpClient实现GET和POST:
4.1.1GET请求时你只要指定URL
HttpClient client = new DefaultHttpClient();
String getURL = "http://www.google.com/getrequest";
HttpGet get = new HttpGet(getURL);
try {
HttpResponse responseGet = client.execute(get);
} catch (IOException e) {
e.printStackTrace();
}
4.1.2POST请求将数据作为请求的有效载荷的一部分
HttpClient client = new DefaultHttpClient();
String postURL = "http://www.google.com";
HttpPost post = new HttpPost(postURL);
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("key1","value1"));
try {
UrlEncodedFormEntity ent = new UrlEncodedFormEntity(params, HTTP.UTF_8);
post.setEntity(ent);
HttpResponse responsePOST = client.execute(post);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
除非服务器响应,否则execute调用不会返回,即引起阻塞。所以,应其他线程中运行HTTP操作;
4.2 HttpURLConnection类
HttpURLConnection是适合在2.2版本之后版本使用的轻量级客户端。
用HttpURLConnection实现GET:
URL url = null;
HttpURLConnection urlConnection = null;
try {
url = new URL("http://www.google.com");
urlConnection = (HttpURLConnection)url.openConnection(); //建立连接
int statusCode = urlConnection.getResponseCode();
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
urlConnection.disconnect();
}
标签:
原文地址:http://www.cnblogs.com/fredzzt/p/4217468.html