• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

HTTP基础知识(仅介绍涉及R语言爬虫部分)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

说明:本文参照Simon Munzert著&吴今朝译的《基于R语言的自动数据收集》一书,进行个人二次整合而成,如有侵权,告知后删。

同步转载至个人公众号:R语言学习

同步转载至个人知乎专栏:R数据处理

(一)HTTP基础知识

1、HTTP定义

HTTP(HyperText Transfer Protocol)意为超文本协议,本质上是网络客户端(如浏览器)和服务器(对请求进行响应的计算机)之间进行通信的协议,通信内容包括客户端从服务器获取几乎任何类型的资源(如文本、图片、音频、视频),还包括客户端向服务器发送各类型数据。

2、HTTP通信流程


(图为书中内容整理)

通信流程说明:

①用户首先通过鼠标/键盘点击或手动输入目标链接(即URL(Uniform Resource Locators),中文名称:统一资源定位符),向HTTP客户端(如常见的浏览器)传达数据查询需求。

②HTTP客户端收到需求后,将收到的URL信息向DNS服务器(域名系统)询问链接对应的具体IP地址,DNS服务器返回URL对应的IP地址。

③HTTP客户端再拿着IP地址通过TCP协议(传输控制协议,Transmission Control Protocol)和IP协议(Internet Protocol)向HTTP服务器发出数据请求,等待服务器响应。

④HTTP服务器将请求的相关信息返回给HTTP客户端,由客户端返回给客户。

⑤重复上述步骤①~④,直到所有请求执行完毕。

3、HTTP特点

HTTP是一个无状态协议。

这意味着,如果没有其他手段,客户端与服务器之间的每个请求-响应的来回,都会被默认当作首次交互来处理。

4、URL语法

4.1 URL格式

scheme://hostname:port/path?querystring#fragment

可见,一个完整的URL共有6部分构成,但是并不是每个部分都一定要具备。

例:https://image.baidu.com/search/indextn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1526179817032_R&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=%E6%B5%B7%E6%BB%A9

参数解释:

scheme:模式名,这里我们的模式为https

hostname:主机名,表示存放了我们需要的资源的主机名字,示例中的主机名为image.baidu.com,需要使用DNS域名系统将其转换为IP地址。

port:为TCP(传输控制协议)端口,不特别注明的情况下,默认端口为80。

path:为文件在主机中存放的路径,结构同普通文件路径一致。示例的路径为:search/index

querystring:为查询字符串,通常格式为:name=value,一个URL钟可以有一个或多个查询字符串,多个查询字符串之间需要用&符号进行连接,示例中,我们共有23个查询字符串,均使用&符号连接。

fragment:为分段符,主要用于文档内容进行分段查询与显示,如http://www.w3.org:80/People/Berners-Lee/#Bio,表示直接查询文档中Bio部分,即人物传记部分。

4.2 URL编码规则

URL通过ASCII字符集传输,由于ASCII字符集仅有128个字符,所有不包含在该字符集中的字符(主要是特殊字符)都需要转义,即用标准表示法替代,如果直接输入未经转义的字符,则会报错。

例:在ASCII中,英文冒号的表示方式为“%3a”

更多字符转义方式请参见:http://www.w3school.com.cn/tags/html_ref_urlencode.html

5、HTTP消息-请求模式

请求模式


示例


(图为书中内容整理)

参数解释:

5.1 起始行

顾名思义,起始行是每个HTTP消息的第一行,在起始行中,我们定义了请求方法,即参数[method],定义了请求路径,即参数[path],还申明了客户端(主要是浏览器)能理解的HTTP最高版本,即参数[version]。

结合示例来看,①我们的请求模式为POST,该模式表示“利用正文消息向服务器发送数据/文件,从服务器检索资源”,关键点是向服务器主动发送数据再进行检索,而不是简单的查询。

②示例中请求路径为”/greetings.html ”。③申明了客户端能理解的HTTP最高版本为HTTP/1.1,即HTTP的1.1版。

5.1.1常用的请求方法

常见的HTTP请求方法
GET 从服务器检索资源,且不会在消息正文中发送内容。(网络爬虫最为常用)
POST 利用消息正文向服务器发送数据/文件,如在表单中输入数据,从服务器检索资源。(网络爬虫最为常用)
HEAD 和GET工作原理类似,但服务器响应只有起始行和标头,没有正文,常用于监测检索请求是否成功被服务器接受。
PUT 把请求消息的正文保存在服务器上。
DELETE 从服务器删除一个资源。
TRACE 追踪消息到达服务器沿途的路径,即请求获得发送某条请求消息后,直到到达服务器所经过的代理服务器清单。
OPTIONS 返回支持的HTTP方法清单。
CONNECT 建立一个网络连接。

5.2 标头

请求模式中的标头为客户端和服务器提供了元信息,定义了服务器接到请求后需要采取的行动,主要包括一些首选项和随消息一起发送的内容设置。

我们可以通过设置标头字段实现个性化的请求,标头字段格式:

[header name:]   [header value] 

即:标头名称:标头取值

示例请求中,Host:  www.r-datacollection.com,其中Host为标头名称, www.r-datacollection.com为标头取值,即主机名。标头Host是HTTP/1.1版本需要用到的标头字段,在多个主机名重定向到同一个IP地址时,它能帮助服务器决定使用哪个URL。

5.2.1 常见的请求标头

常见请求标头
标头字段名 使用说明 示例 示例说明
Accept 告诉服务器哪种资源类型是客户端愿意当做响应来接收的。可接收的资源类型有多个时,需要用逗号分开,同时用分号后的内容定义其他参数,如返回的优先级别(q)。 Accept:  text/html,image/gif,image/*,*/*;q=0.8

text/html,image/gif表示客户端接收HTML格式的文本和GIF格式的图片,对这两者没有设置优先级q,默认q=1,即最优先返回。

②其次格式为image/*表示其他格式的图片可以接收,*/*表示其他任何格式的任何内容也可接收,*表示对对象无限制。*/*;q=0.8表示其他任何格式的任何内容接收的优先等级是0.8。

Accept-Encoding 告诉服务器哪种编码/压缩方法客户端可以接受。可接收的编码/压缩方法有多个时,需要用逗号分开,同时用分号后的内容定义其他参数,如返回的优先级别(q)。 Accept-Encoding: gzip,deflate,sdch;q=0.9,identity;q=0.8,*;q=0

gzip,deflate表示客户端接收gzip和deflate编码方式,默认q=1,即最优先返回。

sdch;q=0.9,identity;q=0.8表示在没有gzip,deflate编码方式下,也可以接受sdch,优先级为q=0.9,居于第二位。如果sdch也没有,则接受identity,即无编码的内容。

*;q=0表示不接受任何其他的编码方式,q=0表示不接受。

Authorization 向服务器传递用户名和密码的一种简单方式。用户名首先合并为username:password格式,然后根据Base64进行编码,保证用户名和密码中所涉及字符均在ASCII字符集中,编码结果不进行加密。 Authorization: Basic cm9va211ojEyM0zTm90QVN1Y3VyZVBX Basic申明了服务器端对用户名及密码验证方式为Basic,cm9va211ojEyM0zTm90QVN1Y3VyZVBX为经过编码后的用户名+密码。
Cookie 从服务器发出的请求,用于识别客户端,判断是否与该客户端有过联系。字段内容由一对一对的name=value组成,每对参数用分号分隔。 Cookie: sessionid=2783321;path=/;domain=r-datacollection.com;expires=Mon, 31-Dec-2035 23:00:00 GMT

保留会话id号2783321直到Mon, 31-Dec-2035 23:00:00 ,时间标准采用GMT(世界标准时间)

sessionid=2783321对域名r-datacollection.com及其所有子目录(通过path=/申明)有效

From 客户端在向服务器提交请求时,同时提供发送邮件地址的选项,在爬虫时,可以通过设置邮件地址,让网站管理员在必要时联系我们。 Form: [email protected] 附上在下的邮箱,欢迎大家多多交流。
Host Host是HTTP/1.1版本需要用到的标头字段,在多个主机名重定向到同一个IP地址时,它能帮助服务器决定使用哪个URL。  Host: www.r-datacollection.com:80 www.r-datacollection.com为主机名,80为默认端口。
If-Modified-Since 用于服务器判断客户端请求标头中提供的日期之后,客户端发出的请求中涉及到的资源是否被修改过。如果没有修改,则返回状态码:304 If-Modified-Since: Thu,27 Feb Feb 2014 13:05:34 GMT  
Connection

用于设置客户端与服务器之间连接状态,在不同的HTTP版本中不太一致。

①HTTP/1.0:在客户端获得服务器的响应后,默认会关闭连接,如需保持连接,需要手动设置Connection: Keep-Alive

②HTTP/1.1:在客户端获得服务器的响应后,默认是保持连接,如需关闭连接,需手动设置onnection: Close

   
Proxy-Authorization 用法同Authorization,只是Proxy-Authorization只适用于代理服务器。    
Proxy-Connection 用法同Connection,只是Proxy-Connection只适用于代理服务器。    
Referer 用于告诉服务器,对该资源的请求是从什么位置发出的。    
User-Agent 高诉服务器,提出资源请求的客户端信息,包括操作系统信息,浏览器信息,软件信息等。 R version 3.0.2(2013-09-25),x86_64-w64-mingw32  
Via 提供HTTP消息到达服务器所经过的代理服务器和网关ID。    

6、HTTP消息-响应模式

待更。

(尊重劳动成果,转载请注明出处)


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap