HTTP原理(五)——请求(Request)

Request,即请求,由客户端向服务端发出。可以将 Request 划分为四部分内容:RequestMethod、Request URL、Request Headers、Request Body,即请求方式、请求链接、请求 头、请求体。

Request Method

请求方式,请求方式常见的有两种类型, GETPOST
我们在浏览器中直接输入一个 URL 并回车,这便发起了一个 GET 请求,请求的参数会直接包含到 URL 里,例如百度搜索 Python,这就是一个 GET 请求,链接为:baidu.com/s?,URL中包含了请求的参数信息,这里参数 wd 就是要搜寻的关键字。POST 请求大多为表单提交发起,如一个登录表单,输入用户名密码,点击登录按钮,这通常会发起一个 POST 请求,其数
据通常以 Form Data 即表单的形式传输,不会体现在 URL 中。
GET 和 POST 请求方法有如下区别:
GET 方式请求中参数是包含在 URL 里面的,数据可以在 URL 中看到,而 POST 请求的URL 不会包含这些数据,数据都是通过表单的形式传输,会包含在 Request Body 中。
GET 方式请求提交的数据最多只有 1024 字节,而 POST 方式没有限制。
所以一般来说,网站登录验证的时候,需要提交用户名密码,这里包含了敏感信息,使用GET方式请求的话密码就会暴露在URL里面,造成密码泄露,所以这里最好以POST方式发送。文件的上传时,由于文件内容比较大,也会选用POST方式。
我们平常遇到的绝大部分请求都是 GET 或 POST 请求,另外还有一些请求方式,如 HEAD、PUT、DELETE、OPTIONS、CONNECT、TRACE,我们简单将其总结如下:
方法描述

GET 请求指定的页面信息,并返回实体主体。

HEAD 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头。

POST 向指定资源提交数据进行处理请求,数据被包含在请求体中。

PUT 从客户端向服务器传送的数据取代指定的文档的内容。

DELETE 请求服务器删除指定的页面。

CONNECT HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。

OPTIONS 允许客户端查看服务器的性能。
TRACE 回显服务器收到的请求,主要用于测试或诊断。


Request URL

顾名思义,就是请求的网址,即统一资源定位符,用 URL 可以唯一确定我们想请求的资源。

Request Headers

请求头,用来说明服务器要使用的附加信息,比较重要的信息有 Cookie、Referer、User-Agent 等,下面将一些常用的头信息说明如下:

Accept,请求报头域,用于指定客户端可接受哪些类型的信息。

Accept-Language,指定客户端可接受的语言类型。

Accept-Encoding,指定客户端可接受的内容编码。

Host,用于指定请求资源的主机 IP 和端口号,其内容为请求 URL 的原始服务器或网关位置。

从 HTTP 1.1 版本开始,Request 必须包含此内容。

Cookie,也常用复数形式 Cookies,是网站为了辨别用户进行 Session 跟踪而储存在用户本地的数据。Cookies 的主要功能就是维持当前访问会话,例如我们输入用户名密码登录了某个网站,登录成功之后服务器会用 Session 保存我们的登录状态信息,后面我们每次刷新或请求该站点的其他页面时会发现都是保持着登录状态的,在这里就是 Cookies的功劳,Cookies 里有信息标识了我们所对应的服务器的 Session 会话,每次浏览器在请求该站点的页面时都会在请求头中加上 Cookies 并将其发送给服务器,服务器通过Cookies 识别出是我们自己,并且查出当前状态是登录的状态,所以返回的结果就是登录之后才能看到的网页内容。

Referer,此内容用来标识这个请求是从哪个页面发过来的,服务器可以拿到这一信息并
做相应的处理,如做来源统计、做防盗链处理等。
User-Agent,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系
统及版本、浏览器及版本等信息。在做爬虫时加上此信息可以伪装为浏览器,如果不加很
可能会被识别出为爬虫。
Content-Type,即 Internet Media Type,互联网媒体类型,也叫做 MIME 类型,在
HTTP 协议消息头中,使用它来表示具体请求中的媒体类型信息。例如 text/html 代表
HTML 格式,image/gif 代表 GIF 图片,application/json 代表 Json 类型,更多对应关
系可以查看此对照表:tool.oschina.net/common。

因此,Request Headers 是 Request 等重要组成部分,在写爬虫的时候大部分情况都需要设定 Request Headers。

Request Body

即请求体,一般承载的内容是 POST 请求中的 Form Data,即表单数据,而对于 GET 请求 Request Body 则为空。

例如在这里我登录 GitHub 时捕获到的 Request 和 Response 如图所示:


详细信息
在登录之前我们填写了用户名和密码信息,提交时就这些内容就会以 Form Data 的形式提交给服务器,此时注意 Request Headers 中指定了 Content-Type 为 application/x-www-form-urlencoded,只有设置 Content-Type 为 application/x-www-form-urlencoded 才会以Form Data 形式提交,另外我们也可以将 Content-Type 设置为 application/json 来提交Json 数据,或者设置为 multipart/form-data 来上传文件。
下面列出了 Content-Type 和 POST 提交数据方式的关系:

Content-Type 提交数据方式

application/x-www-form-urlencodedForm表单提交

multipart/form-data 表单文件上传提交

application/json 序列化 Json 数据提交
text/xml XML  数据提交


以上便是对 Request 各部分内容的解释。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值