Http协议:
http是一种应用层协议,它是基于TCP实现了可靠的数据传输,能够保证数据的完整性,可靠性。(TCP提供了可靠的字节流服务,采用3次握手策略)TCP将http的请求报文按序号分割成报文段,服务端将将接收到的报文 段按原来的顺序重组,这样一来对于数据量大的请求报文也能有效的进行传输。
为什么说http是一种应用层协议呢?看下面TCP/IP的分层图就可以理解了。
应用层----> Http
传输层----> TCP
网络层----> IP
数据链路层--->网络/网络接口
Http协议的请求方法介绍:
GET :获取URL所定位的资源。
POST : 用于服务端传递数据。
HEAD:用于请求服务端头部信息,服务端不会返回实体的主体部分。
PUT: 向服务器写入资源(这个一般都不会使用或者说被禁止使用)
DELETE :通知服务端删除URL所指定的资源
TRACE :客户端发送一个请求,一般都会通过防火墙,端口,从而会改变原来的Http请求,所以它用来回显服务端收到的请求。
OPTIONS :返回服务器针对特定资源所支持的HTTP请求方法。(出于安全性考虑这个方法也基本上被禁止了)。
通过Http的GET请求获取URL所指定的资源:
public class MainActivity extends Activity {
private Button bt;
private TextView text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt = (Button) findViewById(R.id.bt);
text = (TextView) findViewById(R.id.text);
final StringBuffer buffer = new StringBuffer();
bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
new AsyncTask<String, Void, String>() {
@Override
protected String doInBackground(String... arg0) {
try {
URL url = new URL(arg0[0]);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
//添加请求方法
con.setRequestMethod("GET");
//添加请求头
con.setRequestProperty("Connection", "Keep-Alive");
//获取服务端返回的输入流,拿到实体数据
InputStream is = con.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader reader = new BufferedReader(isr);
String line;
while((line = reader.readLine()) != null){
buffer.append(line);
Log.d("AAAA", line);
}
is.close();
isr.close();
reader.close();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
}
return buffer.toString();
}
protected void onPostExecute(String result) {
text.setText(result);
};
}.execute("http://www.cnblogs.com/jdsjlzx/archive/2011/07/25/2116351.html");
}
});
}
}
通过GET请求获取的结果:
Http的POST请求:
public class MainActivity extends Activity {
private Button bt;
private TextView text;
private String result;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt = (Button) findViewById(R.id.bt);
text = (TextView) findViewById(R.id.text);
bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
new AsyncTask<String, Void, String>() {
@Override
protected String doInBackground(String... arg0) {
try {
URL url = new URL(arg0[0]);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
//添加请求方法
con.setRequestMethod("POST");
//启动输出流,当需要传输数据的时候开启
con.setDoOutput(true);
//获取输出流用于传输数据
OutputStream os = con.getOutputStream();
//http://baike.baidu.com/link
//?url=CnOOIvUbKn-KxsPSAglWkeks4P9IN3FRT7ggUNLDNLjKgsLfJIGEf0GuA9p_3Dc7c-n4ffk3etWgRgYyYUwbF_
OutputStreamWriter writer = new OutputStreamWriter(os,"utf-8");
BufferedWriter bw = new BufferedWriter(writer);
bw.write("url=CnOOIvUbKn-KxsPSAglWkeks4P9IN3FRT7ggUNLDNLjKgsLfJIGEf0GuA9p_3Dc7c-n4ffk3etWgRgYyYUwbF_");
bw.flush();
//获取服务端返回的输入流,获取到返回的实体
InputStream is = con.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while((line = br.readLine()) != null){
Log.d("AAAA", line);
result += line;
}
bw.close();
writer.close();
is.close();
isr.close();
br.close();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
protected void onPostExecute(String result) {
text.setText(result);
};
}.execute("http://baike.baidu.com/link");
}
});
}
}
POST请求结果:
以上就是Http协议的基本介绍,如果还想更深入了解的话可以自己去了解相关的Http协议的相关知识。