47
1 第8第 HTTP 第第第第 第第第第第第

第 8 章 HTTP 应用编程

Embed Size (px)

DESCRIPTION

第 8 章 HTTP 应用编程. 网络应用编程. 网络应用编程 – 回顾. Web 服务器. B. B. HTTP. 思考: 是不是 HTTP 仅仅能用于 B/S 模式?. 思考:在日常生活中哪些场景见到过 HTTP?. B. B. B /S. 第 8 章 HTTP 应用编程. 任务 1 :模拟提交web请求 演示程序. 第 8 章 HTTP 应用编程. 任务 2 --模拟自动登录 : 自动化测试 恶意攻击. 第 8 章 HTTP 应用编程. 任务 3 : HTTP多线程下载. 第 8 章 HTTP 应用编程. - PowerPoint PPT Presentation

Citation preview

Page 1: 第 8 章   HTTP 应用编程

1

第 8 章 HTTP应用编程

网络应用编程

Page 2: 第 8 章   HTTP 应用编程

2

网络应用编程 – 回顾

思考:在日常生活中哪些场景见到过

HTTP?

思考:是不是 HTTP仅仅能用于 B/S 模式?

B/S

Web服务器... HTTP

BB

BB

Page 3: 第 8 章   HTTP 应用编程

3

第 8 章 HTTP应用编程

任务 1 :模拟提交 web 请求 演示程序

Page 4: 第 8 章   HTTP 应用编程

4

第 8 章 HTTP应用编程

任务 2-- 模拟自动登录:自动化测试恶意攻击

Page 5: 第 8 章   HTTP 应用编程

5

第 8 章 HTTP应用编程

任务 3 :HTTP 多线程下载

Page 6: 第 8 章   HTTP 应用编程

6

第 8 章 HTTP应用编程

8.1 HTTP简介8.2 HTTP编程相关类8.3 利用 HTTP实现多线程文件下载

Page 7: 第 8 章   HTTP 应用编程

7

图 1 HTTP 请求过程

HTTP(HyperText Transfer Protocol )超文本传输协议

Page 8: 第 8 章   HTTP 应用编程

8

HTTP/1.1 200 OKDate: Sat, 31 Dec 2005 23:59:59 GMTContent-Type: text/html;charset=ISO-8859-1Content-Length: 122

<html><head>

<title>Wrox Homepage</title></head><body>

First HTML</body>

</html>

HTTP/1.1 200 OKDate: Sat, 31 Dec 2005 23:59:59 GMTContent-Type: text/html;charset=ISO-8859-1Content-Length: 122

<html><head>

<title>Wrox Homepage</title></head><body>

First HTML</body>

</html>

将实际响应内容用浏览器打开观察效果?将实际响应内容用浏览器打开观察效果?

Page 9: 第 8 章   HTTP 应用编程

9

HTTP(HyperText Transfer Protocol )全称:超文本传输协议 定义 Web 服务器和浏览器之间传输的沟通方式

早期: HTML文件发展:音频文件、视频文件等

说明:目前常用的 HTTP协议的版本是 Http1.1RFC 2616描述了 HTTP协议的具体信息

8.1 HTTP简介

Page 10: 第 8 章   HTTP 应用编程

10

8.1.1 HTTP的特点

( 1) HTTP 是无状态的( 2) HTTP 以 TCP 方式工作( 3) HTTP 使用元信息作为标头

Page 11: 第 8 章   HTTP 应用编程

11

8.1.1 HTTP的特点

HTTP是无状态的“ 无状态”:客户端发送一次请求后,服务器并没有存储关于该客户端的任何状态信息。例如:

Public int LoginCount = 0; void Login() {

… … if(Success) LoginCount += 1; }解决方案 : 客户端 Cookie,服务器端 Session

登录成功N 次后loginCouent=N

?

Page 12: 第 8 章   HTTP 应用编程

12

8.1.1 HTTP的特点

HTTP 以 TCP 方式工作 ,不丢失数据 ,不乱序 非持久连接 ( 早期) 持久连接(当前)

客户端

服务器

请求报文

响应报文

打开 TCP连接

关闭 TCP连接

图 2 非持久连接

Page 13: 第 8 章   HTTP 应用编程

13

8.1.1 HTTP的特点

HTTP 使用元信息作为标头HTTP 通过添加标头( Header )的方式向服务器提供本次 HTTP请求的相关信息,即在主要数据前添加一部分信息,称为元信息( Metainformation )。

例如,传送的对象属于哪种类型,采用的是哪种编码等

<request line> <headers> <blank line> <request-body>

Page 14: 第 8 章   HTTP 应用编程

14

8.1.2 HTTP的请求与响应

本节主要内容请求报文格式响应报文格式请求类型

演示利用 HttpWatch软件,实时进行 Http协议分析。

怎么看到 HTTP 的请求报文和响应报文?

Page 15: 第 8 章   HTTP 应用编程

15

8.1.2 HTTP的请求与响应

请求报文例子:

空空空空

空空空空空空空空

空空空空空空

空空空空

Page 16: 第 8 章   HTTP 应用编程

16

8.1.2 HTTP的请求与响应

1.HTTP 请求:客户端将 HTTP 请求发送到服务器时,格式如下:< request-line > :

请求行 Method URL Version< headers > :

标头部分,说明服务器要使用的附加信息,一般由多行组成。

< blank line > : 标头之后是一个空行

[ < request-body > ] : 空行之后是请求的主体,主题中可以包含任意数据

Page 17: 第 8 章   HTTP 应用编程

17

8.1.2 HTTP 的请求与响应

例子例子POST /TheStockExchange/Trading/GetStockPrice.asp HTTP/1.1Host: localhostContent-Type: application/x-www-form-urlencodedContent-Length: 11

name=Professional&publisher=Wiley

POST /TheStockExchange/Trading/GetStockPrice.asp HTTP/1.1Host: localhostContent-Type: application/x-www-form-urlencodedContent-Length: 11

name=Professional&publisher=Wiley

空空空空空空空空

Method URL VersionHeaders

request body

Method URL VersionHeaders

request body空空空空空空空空

Page 18: 第 8 章   HTTP 应用编程

18

8.1.2 HTTP的请求与响应

2.HTTP 响应一般格式为 :< status-line > :Version StatusCode Description < headers >

< blank line > [ < response-body > ]

< status-line > 状态行:所有 HTTP响应的第一行内容依次是当前 HTTP版本号、 3 位数字组成的状态码以及描述状态的短语,空格分隔

Page 19: 第 8 章   HTTP 应用编程

19

8.1.2 HTTP的请求与响应

状态码的第一个数字代表当前响应的类型,规定如下。1xx 消息— 请求已被服务器接收,继续处理。2xx 成功— 请求已成功被服务器接收、理解、并接受3xx 重定向— 需要后续操作才能完成这一请求。4xx 请求错误— 请求含有词法错误或者无法被执行。5xx 服务器错误— 服务器处理某个正确请求时发生错误

Page 20: 第 8 章   HTTP 应用编程

20

8.1.2 HTTP的请求与响应

2.HTTP响应HTTP常用状态码

Page 21: 第 8 章   HTTP 应用编程

21

8.1.2 HTTP的请求与响应

HTTP/1.1 200 OKDate: Sat, 31 Dec 2005 23:59:59 GMTContent-Type: text/html;charset=ISO-8859-1Content-Length: 122

<html><head>

<title>Wrox Homepage</title></head><body>

testtest</body>

</html>

HTTP/1.1 200 OKDate: Sat, 31 Dec 2005 23:59:59 GMTContent-Type: text/html;charset=ISO-8859-1Content-Length: 122

<html><head>

<title>Wrox Homepage</title></head><body>

testtest</body>

</html>

空空空空

空空空空空空空空

Page 22: 第 8 章   HTTP 应用编程

22

8.1.2 HTTP的请求与响应

Page 23: 第 8 章   HTTP 应用编程

23

8.1.2 HTTP的请求与响应

3.Http 请求方式( 1) Get 方式

最常见的请求,表示客服端告诉服务器获取哪些资源例如 : 用户在 Web浏览器上输入 www.baidu.cn,此时浏览器向服务器发送的就是一个 GET请求,内部发送的信息如下

• GET / HTTP/1.1 • Host: www.baidu.cn • User-Agent: (内容太长,此处省略) • Connection: Keep-Alive • (此处为一空行)

Page 24: 第 8 章   HTTP 应用编程

24

8.1.2 HTTP的请求与响应

3.Http 请求方式( 1) Get 方式

提交的数据附在 URL 之后(请求行) 例如:要输入查询条件 problem后,点击搜索那么内部发送的信息可能类似下面的内容:

GET /s?wd=problem&rsv_bp=0&… HTTP/1.1

Host: www.baidu.cn User-Agent: …… Connection: Keep-Alive

(此处为一空行) 注意 : 只有第 1行的内容发生了变化 , 观察地址栏???

Page 25: 第 8 章   HTTP 应用编程

25

8.1.2 HTTP的请求与响应

3.Http 请求方式( 1) Get 方式

修改登录页面的表单提交方式为 GET, 观察

地址栏

Page 26: 第 8 章   HTTP 应用编程

26

8.1.2 HTTP的请求与响应

参数在地址栏中显示, header中的请求行中传送格式:以 ? 分割 URL 和传输数据, key=value参数对之间以 & 相连

如数据是英文字母 / 数字,原样发送 如是空格,转换为 + 如是中文 / 其他字符,直接把字符串用BASE64加密,% XX中的 XX为该符号以 16进制表示的 ASCII

例如name=hyddd&password=idontknow

Page 27: 第 8 章   HTTP 应用编程

27

8.1.2 HTTP的请求与响应

( 2) POST 请求用途:要求服务器接收大量的信息,一般用于提交Form表单。

POST VS GETGET: 在 URL 后面附加信息POST: 在请求主体中为服务器提供附加信息

演示:提交 Form表单时分别选择 GET和 POST观察地址栏的变化 .

Page 28: 第 8 章   HTTP 应用编程

28

8.1.2 HTTP的请求与响应

( 2) POST 请求 参数键值对存放在请求主体中,而非在地址中。例如:

POST /Login.aspx HTTP/1.1User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)

Content-Type: application/x-www-form-urlencodedHost: localhost:2207Content-Length: 49Connection: Keep-Alive(此处为一空行)name=a&passwd=b&mysubmitButton=%E7%99%BB%E5%BD%95

Page 29: 第 8 章   HTTP 应用编程

29

8.1.2 HTTP的请求与响应

HEAD请求HEAD请求获得 header部分。因此 HEAD方法通常不单独使用,而是和其他的请求方法一起起到辅助作用。

例如:一些搜寻引擎使用的自动搜索机器人采用这个方法来获得网页的标志信息

检查远程文件下载链接是否可用

Page 30: 第 8 章   HTTP 应用编程

30

第 8 章 HTTP应用编程

8.1 HTTP 简介8.2 HTTP 编程相关类8.3 利用 HTTP实现多线程文件下载

Page 31: 第 8 章   HTTP 应用编程

31

8.2 HTTP编程相关类

应用分析简化版的浏览器抓取页面源码表单自动填入

模拟自动登录文件上传文件下载

Page 32: 第 8 章   HTTP 应用编程

32

8. 2. 4 利用 GET 方法提交请求的数据

例 1 :编写程序,制作简化版本的浏览器

访问 www.baidu.com,抓取页面内容

Page 33: 第 8 章   HTTP 应用编程

338.2.1 WebRequest类和 HttpWebRequest类 GET / HTTP/1.1 Host: www.baidu.cn User-Agent: (内容太长,此处省略) Connection: Keep-Alive (此处为一空行)

Page 34: 第 8 章   HTTP 应用编程

348.2.1 WebRequest类和 HttpWebRequest类 WebRequest:

请求 / 响应模型的抽象( abstract )基类。用于访问 Internet 数据。用协议不可知的方式从 Internet 请求数据。

HttpWebRequest :是针对于 HTTP 的特定实现。该类通过 HTTP 和服务器交互

HttpWebRequest

WebRequest

Page 35: 第 8 章   HTTP 应用编程

35

8.2.3 Uri类

为了使 URI具有规范化格式, Uri构造函数执行以下步骤。( 1 )将 URI方案转换为小写。( 2 )将主机名转换为小写。( 3 )移除默认端口号和空端口号。( 4 )移除多余的段(如“ /”和“ /test”段)以简化URI

下面的代码创建 Uri类的实例,并用它来创建 WebRequestUri siteUri = new Uri("http://www.contoso.com/");

WebRequest request = WebRequest.Create(siteUri);。

Page 36: 第 8 章   HTTP 应用编程

368.2.1 WebRequest类和 HttpWebRequest类模拟 HTTP 请求

创建 HttpWebRequest 对象,例如HttpWebRequest request =

设置相关属性,模拟 POST或者 GET 方式获取数据request.Methed = "GET";

request.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)“

… … …

WebRquest.Create(“ http://msdn.microsoft.com")

(HttpWebRequest)

Page 37: 第 8 章   HTTP 应用编程

378.2.1 WebRequest类和 HttpWebRequest类

Page 38: 第 8 章   HTTP 应用编程

388.2.2 WebResponse类和 HttpWebResponse类模拟 HTTP 请求

提交请求HttpWebResponse response = (HttpWebResponse)request.GetResponse();

访问响应信息response.StatusCoderesponse.GetResponseStream();

释放资源

Page 39: 第 8 章   HTTP 应用编程

398.2.2 WebResponse类和 HttpWebResponse类

Page 40: 第 8 章   HTTP 应用编程

40

8.2.4 利用 GET 方法提交请求的数据

例 1 :简化版浏览器

Page 41: 第 8 章   HTTP 应用编程

41

8.2.4 利用 GET方法提交请求的数据

例 2 :修改程序,以 GET 方式提交搜索条件?www.test.com?grade=1&school=henu

访问 www.baidu.com,抓取页面内容

Page 42: 第 8 章   HTTP 应用编程

42

8.2.4 利用 GET 方法提交请求的数据

小结构造 HttpWebRequest对象 ,注意参数以键值对的形式,追加在 URL地址后

request.Methed="GET"GetResponse对象,提交请求获取响应流,抓取页面内容

Page 43: 第 8 章   HTTP 应用编程

43

8.2.5 利用 POST 方法提交请求的数据

模拟登录考虑和 GET方式的不同?

Page 44: 第 8 章   HTTP 应用编程

44

8.2.5 利用 POST 方法提交请求的数据

原理: POST请求时,参数键值对存放在请求主体中,而非在地址中。例如:POST /Login.aspx HTTP/1.1User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)

Content-Type: application/x-www-form-urlencodedHost: localhost:2207Content-Length: 49Connection: Keep-Alive(此处为一空行)name=a&passwd=b&mysubmitButton=%E7%99%BB%E5%BD%95

Page 45: 第 8 章   HTTP 应用编程

45

8.2.5 利用 POST 方法提交请求的数据

例 3 :演示模拟登录建立 ASP.NET web 应用程序建立模拟登录程序,模拟 POST 请求提交数据

Page 46: 第 8 章   HTTP 应用编程

46

8.3 利用 HTTP实现多线程文件下载

例 8-3的运行界面

Page 47: 第 8 章   HTTP 应用编程

47

8.3 利用 HTTP实现多线程文件下载

使用迅雷、网络蚂蚁或网络快车等软件从因特网上下载文件的经历,这些软件由于采用了多线程下载技术,因此下载的速度非常快。

核心步骤:( 1 )下载数据时,首先需要知道某个 Web资源是否有效,利用 HTTP的 HEAD方法,根据标头返回的状态码,即可以确定资源的可用性。 P219

( 2 )实现多线程下载的关键是了解如何获取下载文件的总长度以及如何从源文件下载指定范围的数据。 P220

(3) 各个线程如何分布下载,并最终完成文件所有内容的下载?