博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android笔记之 网络http通信
阅读量:5875 次
发布时间:2019-06-19

本文共 2580 字,大约阅读时间需要 8 分钟。

0、在认识HTTP前先认识URL

在我们认识HTTP之前,有必要先弄清楚URL的组成,比如:

它的含义例如以下:

1. ;

2. www:代表一个Web(万维网)server;

3.****.com/:这是装有网页的server的域名。或网站server的名称;

4.China/:为该server上的子文件夹,就好像我们的文件夹;

5.Index.htm:index.htm是目录中的一个HTML文件(网页)。

 

1、什么是HTTP

 HTTP协议是一种应用层协议,HTTPHyperTextTransfer Protocol(超文本传输协议)的英文缩写。

HTTP能够通过传输层的TCP协议在client和server之间数据传输。

HTTP协议主要用于Web浏览器和Webserver之间的数据交换。

我们在使用IEFirefox浏览网页或下载Web资源时。通过在地址栏中输入,开头的4个字母http就相当于通知浏览器使用HTTP协议来和host所确定的server进行通讯。

 

HTTP/1.0

这是第一个在通讯中指定版本号号的 HTTP协议版本号,至今仍被广泛採用。特别是在代理server中。

HTTP/1.1

当前版本号。持久连接被默认採用。并能非常好地配合代理server工作。

还支持以管道方式在同一时候发送多个请求,以便减少线路负载,提高传输速度。

 

 

2HTTP工作方式

  HTTP协议採用了请求/响应的工作方式。基于HTTP1.0协议的client在每次向server发出请求后,server就会向client返回响应消息(包含请求是否正确以及所请求的数据),在确认client已经收到响应消息后,服务端就会关闭网络连接(事实上是关闭TCP连接)。在这个传输数据过程中。并不保存不论什么历史信息和状态信息,因此,HTTP协议也被觉得是无状态的协议。图1描绘了HTTP1.0协议的通讯过程。

3HTTP响应码

1xx:信息响应类,表示接收到请求而且继续处理

2xx:处理成功响应类,表示动作被成功接收、理解和接受

3xx:重定向响应类,为了完毕指定的动作,必须接受进一步处理

4xx:client错误,客户请求包括语法错误或者是不能正确运行

5xx:服务端错误,server不能正确运行一个正确的请求

 

4HTTP的请求体与回复体

5、两种HTTP通信

1HttpURLConnection

2HttpClientURLConnection

以下举例说明第一种HttpURLConnection

private class DownThread extends Thread	{		// 当前线程的下载位置		private int startPos;		// 定义当前线程负责下载的文件大小		private int currentPartSize;		// 当前线程须要下载的文件块		private RandomAccessFile currentPart;		// 定义已经该线程已下载的字节数		public int length;		public DownThread(int startPos, int currentPartSize,			RandomAccessFile currentPart)		{			this.startPos = startPos;			this.currentPartSize = currentPartSize;			this.currentPart = currentPart;		}		@Override		public void run()		{			try			{				URL url = new URL(path);				HttpURLConnection conn = (HttpURLConnection)url					.openConnection();				conn.setConnectTimeout(5 * 1000);				conn.setRequestMethod("GET");				conn.setRequestProperty(					"Accept",					"image/gif, image/jpeg, image/pjpeg, image/pjpeg, "					+ "application/x-shockwave-flash, application/xaml+xml, "					+ "application/vnd.ms-xpsdocument, application/x-ms-xbap, "					+ "application/x-ms-application, application/vnd.ms-excel, "					+ "application/vnd.ms-powerpoint, application/msword, */*");				conn.setRequestProperty("Accept-Language", "zh-CN");				conn.setRequestProperty("Charset", "UTF-8");				InputStream inStream = conn.getInputStream();				// 跳过startPos个字节。表明该线程仅仅下载自己负责哪部分文件。

inStream.skip(this.startPos); byte[] buffer = new byte[1024]; int hasRead = 0; // 读取网络数据。并写入本地文件 while (length < currentPartSize && (hasRead = inStream.read(buffer)) > 0) { currentPart.write(buffer, 0, hasRead); // 累计该线程下载的总大小 length += hasRead; } currentPart.close(); inStream.close(); } catch (Exception e) { e.printStackTrace(); } } }

你可能感兴趣的文章
python活用isdigit方法显示系统进程
查看>>
项目开发总结
查看>>
知行合一
查看>>
jmeter插件之jsonpath提取响应结果和做断言
查看>>
发布支持多线程的PowerShell模块 —— MultiThreadTaskRunner
查看>>
Ubuntu ctrl+alt会导致窗口还原的问题
查看>>
第四十期百度技术沙龙笔记整理
查看>>
推荐系统那点事 —— 基于Spark MLlib的特征选择
查看>>
linux 下RTL8723/RTL8188调试记录(命令行)【转】
查看>>
開始新的征程
查看>>
SpringMVC案例1——对User表进行CRUD操作
查看>>
看雪CTF第十四题
查看>>
模拟生命_吸烟致癌?
查看>>
[Contiki系列论文之1]Contiki——为微传感器网络而生的轻量级的、灵活的操作系统...
查看>>
Android 网络编程 记录
查看>>
微软同步发行Windows 10和Windows 10 Mobile系统更新
查看>>
Maven 传递依赖冲突解决(了解)
查看>>
Zeppelin的入门使用系列之使用Zeppelin运行shell命令(二)
查看>>
安装kali linux 2017.1 【二、安装VMware-tools 以及相关问题处理】
查看>>
[Spark][Python]Spark Join 小例子
查看>>