前言
HTTP: HyperText Transfer Protocol超文本传输协议,是互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准;属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。
一、主要特点
1.支持客户/服务器模式。
2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
二、主要功能详解
1.HTTP访问入口:通过特殊的URL来定位网络资源
格式:http://host[:port][abs_path]
其中:
http:表示要通过HTTP协议来定位网络资源。
host:表示合法的Internet主机域名或IP地址(以点分十进制格式表示);
port:用于指定一个端口号,拥有被请求资源的服务器主机监听该端口的TCP连接。
如果port是空,则使用缺省的端口80。当服务器的端口不是80的时候,需要显式指定端口号。
abs_path:指定请求资源的URI(Uniform Resource Identifier,统一资源定位符),如果URL中没有给出
abs_path,那么当它作为请求URI时,必须以“/”的形式给出。通常这个工作浏览器就帮我们完
成了。
2.HTTP的请求方式
http请求由三部分组成,分别是:请求行、消息报头、请求正文
主要包含有八中请求方式:
(1)OPTIONS 返回服务器针对特定资源所支持的HTML请求方法 或web服务器发送测试服务器功能(允许
客户端查看服务器性能)
(2)GET 向特定资源发出请求(请求指定页面信息,并返回实体主体)
(3)POST 向指定资源提交数据进行处理请求(提交表单、上传文件),又可能导致新的资源的建立或原有
资源的修改
(4)PUT 向指定资源位置上上传其最新内容(从客户端向服务器传送的数据取代指定文档的内容)
(5)HEAD 与服务器索与get请求一致的相应,响应体不会返回,获取包含在小消息头中的原信息(与get请求
类似,返回的响应中没有具体内容,用于获取报头)
(6)DELECT 请求服务器删除request-URL所标示的资源(请求服务器删除页面)
(7)TRACE 回显服务器收到的请求,用于测试和诊断
(8)CONNECT HTTP/1.1协议中能够将连接改为管道方式的代理服务器
一般最常用的是GET、POST方法的请求。
最常用的案例:
(1)请求post方式:
注意一下:在客户端请求访问服务后台使用的时候,客户端提交的数据必须放在消息主体中(entity-body),协议的数据 编码方式可以由开发者自行设定;在服务端通常是根据请求头(headers)中的Content-Type字段来获取请求中的消息主体使用的方式编码,然后再根据其编码方式进行解析消息主体。
public String getHttpResponse(String url,String param){
/* DefaultHttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(url);
JSONObject response = null;
try {
StringEntity s = new StringEntity(json.toString());
s.setContentEncoding("UTF-8");
s.setContentType("application/json");
post.setEntity(s);
HttpResponse res = client.execute(post);
if(res.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
HttpEntity entity = res.getEntity();
String result = EntityUtils.toString(res.getEntity());
response = JSONObject.fromObject(result);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
return response.toString();
}*/
try {
//请求http请求连接
URL postUrl=new URL(url);
HttpURLConnection httpurlConn = (HttpURLConnection) postUrl.openConnection() ;
httpurlConn.setRequestMethod("POST");
httpurlConn.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
httpurlConn.setRequestProperty("Connection", "Keep-Alive");
httpurlConn.setRequestProperty("Content-Length", "0");
httpurlConn.setDoInput(true);//是否輸出參數
httpurlConn.setDoOutput(true);//是否輸入參數
DataOutputStream dosDataOutputStream=new DataOutputStream(httpurlConn.getOutputStream());
dosDataOutputStream.write(param.getBytes("UTF-8"));
dosDataOutputStream.flush();
dosDataOutputStream.close();
httpurlConn.connect();//开始连接
//获取连接response响应
if(httpurlConn.getResponseCode()