您的位置:首页 > 理论基础 > 计算机网络

android6.23Http协议

2016-06-23 09:07 471 查看
http
安卓

HttpClient的使用过程已经废弃我会在之后的里面介绍OkHttpCilent

过程详解

Http请求种类
post提交数据的步骤

http

请求和相应的通用的超文本协议

协议:是一种浏览器和服务器的协议,一种通信标准

通用:范围广

无状态:无请求时连接中断

超文本协议:可以是音频视频各种形式

安卓

安卓程序作为用户和服务器中介承担接受用户操作和请求服务器以及接受服务器响应和向用户做出反馈的作用。

HttpClient的使用过程(已经废弃我会在之后的里面介绍OkHttpCilent)

1.生成代表客户端的HttpClient对象

2.生成代表请求的HttpGet对象

3.发送请求,获得服务器返回的HttpResponse对象

4.检查响应状态是否正常

5.获取响应对象当中的数据

注意:主线程不能访问网络

已经废弃

public class MainActivity extends AppCompatActivity {

private Button button;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//在主线程中不可以访问网络需要新建线程
NetWorkThread t = new NetWorkThread();
t.start();
}
});
}

class NetWorkThread extends Thread {
@Override
public void run() {
//创建HttpClient对象
HttpClient httpClient = new DefaultHttpClient();
//创建代表请求对象,参数为访问的服务器地址
HttpGet get = new HttpGet("http://www.marschen.com/data1.html");
//执行请求,获取服务器返回的对象,服务器返回代码200正常,404客户端错误,
//505服务器错误
try {
HttpResponse response = httpClient.execute(get);
int code = response.getStatusLine().getStatusCode();
if(code == 200) {
//从响应对象取出数据需要entity
HttpEntity entity = response.getEntity();
//以输入流的形式获得数据
InputStream in = entity.getContent();
//处理流数据
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line = reader.readLine();
Log.d("client", line);
}

} catch (IOException e) {
e.printStackTrace();
}
}
}
}


过程详解

Http请求内容分析

请求头:消息的基础属性:来源,目的,特点

Host:marschen.com 本次请求访问主机地址

Cache-control:no-cache 设置网页缓存的使用方法

Pragma:no_cache 有关缓存

Accept:text/html,xxxxx… 浏览器可以接受的数据类型

User-Agent:Mozilla/5.0xxx 主要表示客户端类型

Accept-Encoding :gzip,deflate,sdcn 浏览器能够解码的数据编码方式,服务器可能会压缩数据进行返回

Accept-Language:zh-CN,zh;q=0.8 浏览器期望接受的语言种类

请求体:请求的内容

响应内容分析

响应头:

Content-encoding 返回数据的压缩格式

Content-Length 返回数据量的大小

Content-Type 返回数据的类型

Last-Modified 资源最后修改的时间

Date 返回数据的时间

Server 服务器类型

响应体:响应的内容

请求头与响应头的读取

请求头的读取

//获取请求头的内容,请求头内容全部存储在键值对中
Header[] reqHeader = get.getAllHeaders();
for(Header header : reqHeader) {
String key = header.getName();
String value = header.getValue();
Log.d("client","request header name is :" + key + ",and request value is :" + value);
}


响应头的读取

//获取响应头的内容,都是以键值对存储
Header[] respHeader = response.getAllHeaders();
for(Header header:respHeader) {
String key = header.getName();
String value = header.getValue();
Log.d("client", "response header name is :" + key + ", and response value is :" + value);
}


Http请求种类

get():用于请求URI得到资源

post():向服务器提交新的内容

其他的方法逐渐不用了:

put:修改某个内容

delete:用于删除某个内容

区别:

get方法用于从服务器取回数据,post用于向服务器提交数据

get通常提交的数据量不超过2k,post提交的数据量没有限制

get请求是将所有要提交的数据附在URL之后,而Post请求是将提交的数据放置在请求的请求体当中。

样例:http://192.168.1.100:8081/s02e14.jsp?name=zhangsan&pwd=123456

?后为请求体

post提交数据的步骤

构造请求对象

将需要传递给服务器端的数据放置在键值对对象当中;

将准备好的键值对放置在List中

生成代表请求体的对象

将存有请求键值对的List对象放置在请求体对象当中

将请求体对象放置到请求对象当中

发送请求对象
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: