Upload
ainsley-barton
View
47
Download
7
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
1
第 8 章 HTTP应用编程
网络应用编程
2
网络应用编程 – 回顾
思考:在日常生活中哪些场景见到过
HTTP?
思考:是不是 HTTP仅仅能用于 B/S 模式?
B/S
Web服务器... HTTP
BB
BB
3
第 8 章 HTTP应用编程
任务 1 :模拟提交 web 请求 演示程序
4
第 8 章 HTTP应用编程
任务 2-- 模拟自动登录:自动化测试恶意攻击
5
第 8 章 HTTP应用编程
任务 3 :HTTP 多线程下载
6
第 8 章 HTTP应用编程
8.1 HTTP简介8.2 HTTP编程相关类8.3 利用 HTTP实现多线程文件下载
7
图 1 HTTP 请求过程
HTTP(HyperText Transfer Protocol )超文本传输协议
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>
将实际响应内容用浏览器打开观察效果?将实际响应内容用浏览器打开观察效果?
9
HTTP(HyperText Transfer Protocol )全称:超文本传输协议 定义 Web 服务器和浏览器之间传输的沟通方式
早期: HTML文件发展:音频文件、视频文件等
说明:目前常用的 HTTP协议的版本是 Http1.1RFC 2616描述了 HTTP协议的具体信息
8.1 HTTP简介
10
8.1.1 HTTP的特点
( 1) HTTP 是无状态的( 2) HTTP 以 TCP 方式工作( 3) HTTP 使用元信息作为标头
11
8.1.1 HTTP的特点
HTTP是无状态的“ 无状态”:客户端发送一次请求后,服务器并没有存储关于该客户端的任何状态信息。例如:
Public int LoginCount = 0; void Login() {
… … if(Success) LoginCount += 1; }解决方案 : 客户端 Cookie,服务器端 Session
登录成功N 次后loginCouent=N
?
12
8.1.1 HTTP的特点
HTTP 以 TCP 方式工作 ,不丢失数据 ,不乱序 非持久连接 ( 早期) 持久连接(当前)
客户端
服务器
请求报文
响应报文
打开 TCP连接
关闭 TCP连接
图 2 非持久连接
13
8.1.1 HTTP的特点
HTTP 使用元信息作为标头HTTP 通过添加标头( Header )的方式向服务器提供本次 HTTP请求的相关信息,即在主要数据前添加一部分信息,称为元信息( Metainformation )。
例如,传送的对象属于哪种类型,采用的是哪种编码等
<request line> <headers> <blank line> <request-body>
14
8.1.2 HTTP的请求与响应
本节主要内容请求报文格式响应报文格式请求类型
演示利用 HttpWatch软件,实时进行 Http协议分析。
怎么看到 HTTP 的请求报文和响应报文?
15
8.1.2 HTTP的请求与响应
请求报文例子:
空空空空
空空空空空空空空
空空空空空空
空空空空
16
8.1.2 HTTP的请求与响应
1.HTTP 请求:客户端将 HTTP 请求发送到服务器时,格式如下:< request-line > :
请求行 Method URL Version< headers > :
标头部分,说明服务器要使用的附加信息,一般由多行组成。
< blank line > : 标头之后是一个空行
[ < request-body > ] : 空行之后是请求的主体,主题中可以包含任意数据
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空空空空空空空空
18
8.1.2 HTTP的请求与响应
2.HTTP 响应一般格式为 :< status-line > :Version StatusCode Description < headers >
< blank line > [ < response-body > ]
< status-line > 状态行:所有 HTTP响应的第一行内容依次是当前 HTTP版本号、 3 位数字组成的状态码以及描述状态的短语,空格分隔
19
8.1.2 HTTP的请求与响应
状态码的第一个数字代表当前响应的类型,规定如下。1xx 消息— 请求已被服务器接收,继续处理。2xx 成功— 请求已成功被服务器接收、理解、并接受3xx 重定向— 需要后续操作才能完成这一请求。4xx 请求错误— 请求含有词法错误或者无法被执行。5xx 服务器错误— 服务器处理某个正确请求时发生错误
20
8.1.2 HTTP的请求与响应
2.HTTP响应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>
空空空空
空空空空空空空空
22
8.1.2 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 • (此处为一空行)
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行的内容发生了变化 , 观察地址栏???
25
8.1.2 HTTP的请求与响应
3.Http 请求方式( 1) Get 方式
修改登录页面的表单提交方式为 GET, 观察
地址栏
26
8.1.2 HTTP的请求与响应
参数在地址栏中显示, header中的请求行中传送格式:以 ? 分割 URL 和传输数据, key=value参数对之间以 & 相连
如数据是英文字母 / 数字,原样发送 如是空格,转换为 + 如是中文 / 其他字符,直接把字符串用BASE64加密,% XX中的 XX为该符号以 16进制表示的 ASCII
例如name=hyddd&password=idontknow
27
8.1.2 HTTP的请求与响应
( 2) POST 请求用途:要求服务器接收大量的信息,一般用于提交Form表单。
POST VS GETGET: 在 URL 后面附加信息POST: 在请求主体中为服务器提供附加信息
演示:提交 Form表单时分别选择 GET和 POST观察地址栏的变化 .
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
29
8.1.2 HTTP的请求与响应
HEAD请求HEAD请求获得 header部分。因此 HEAD方法通常不单独使用,而是和其他的请求方法一起起到辅助作用。
例如:一些搜寻引擎使用的自动搜索机器人采用这个方法来获得网页的标志信息
检查远程文件下载链接是否可用
30
第 8 章 HTTP应用编程
8.1 HTTP 简介8.2 HTTP 编程相关类8.3 利用 HTTP实现多线程文件下载
31
8.2 HTTP编程相关类
应用分析简化版的浏览器抓取页面源码表单自动填入
模拟自动登录文件上传文件下载
32
8. 2. 4 利用 GET 方法提交请求的数据
例 1 :编写程序,制作简化版本的浏览器
访问 www.baidu.com,抓取页面内容
338.2.1 WebRequest类和 HttpWebRequest类 GET / HTTP/1.1 Host: www.baidu.cn User-Agent: (内容太长,此处省略) Connection: Keep-Alive (此处为一空行)
348.2.1 WebRequest类和 HttpWebRequest类 WebRequest:
请求 / 响应模型的抽象( abstract )基类。用于访问 Internet 数据。用协议不可知的方式从 Internet 请求数据。
HttpWebRequest :是针对于 HTTP 的特定实现。该类通过 HTTP 和服务器交互
HttpWebRequest
WebRequest
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);。
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)
378.2.1 WebRequest类和 HttpWebRequest类
388.2.2 WebResponse类和 HttpWebResponse类模拟 HTTP 请求
提交请求HttpWebResponse response = (HttpWebResponse)request.GetResponse();
访问响应信息response.StatusCoderesponse.GetResponseStream();
释放资源
398.2.2 WebResponse类和 HttpWebResponse类
40
8.2.4 利用 GET 方法提交请求的数据
例 1 :简化版浏览器
41
8.2.4 利用 GET方法提交请求的数据
例 2 :修改程序,以 GET 方式提交搜索条件?www.test.com?grade=1&school=henu
访问 www.baidu.com,抓取页面内容
42
8.2.4 利用 GET 方法提交请求的数据
小结构造 HttpWebRequest对象 ,注意参数以键值对的形式,追加在 URL地址后
request.Methed="GET"GetResponse对象,提交请求获取响应流,抓取页面内容
43
8.2.5 利用 POST 方法提交请求的数据
模拟登录考虑和 GET方式的不同?
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
45
8.2.5 利用 POST 方法提交请求的数据
例 3 :演示模拟登录建立 ASP.NET web 应用程序建立模拟登录程序,模拟 POST 请求提交数据
46
8.3 利用 HTTP实现多线程文件下载
例 8-3的运行界面
47
8.3 利用 HTTP实现多线程文件下载
使用迅雷、网络蚂蚁或网络快车等软件从因特网上下载文件的经历,这些软件由于采用了多线程下载技术,因此下载的速度非常快。
核心步骤:( 1 )下载数据时,首先需要知道某个 Web资源是否有效,利用 HTTP的 HEAD方法,根据标头返回的状态码,即可以确定资源的可用性。 P219
( 2 )实现多线程下载的关键是了解如何获取下载文件的总长度以及如何从源文件下载指定范围的数据。 P220
(3) 各个线程如何分布下载,并最终完成文件所有内容的下载?