爬虫基础(一)HTTP协议 :请求与响应

前言

爬虫需要基础知识,HTTP协议只是个开始,除此之外还有很多,我们慢慢来记录。

今天的HTTP协议,会有助于我们更好的了解网络。

一、什么是HTTP协议

(1)定义

HTTP(超文本传输协议,HyperText Transfer Protocol)是用于在网络上进行数据通信的协议,尤其是用于网页的传输。

简单来说,就是专门把超文本数据从网络上传输到本地浏览器上的一个协议

我们也经常见它,比如网站前面的前缀:

当然,上图有些不太正确,但 HTTPS 其实是HTTP的升级版,二者其实差不太多。

(2)HTTPS

那么HTTPS到底有什么不同呢?

HTTPS的全称是Hypertext Transfer Protocol Secure。相较于HTTP多了一个Secure

所以我们应该知道,哪里升级了。

简单来说,就是在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性

Tips:HTTPS 主要由两部分组成:HTTP + SSL / TLS,也就是在 HTTP 上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过 TLS 进行加密,所以传输的数据都是加密后的数据。(了解即可

(3)URI和URL

还有些专业术语,诸如URI和URL :

  • URI(统一资源标识符):用于标识资源的字符串。
  • URL(统一资源定位符):一种特定类型的URI,用于定位资源并提供如何访问这些资源的信息。
  • URN:统一资源名称

顾名思义,URI让我们可以唯一标识一个资源。URL则让我们可以去定位一个资源。

比如一个网址https://www.example.com

我们可以把这整个链接叫做URI,因为这个网址标识了一个资源。

而这个链接,也叫做URL,因为这个网址的链接也同样定位了一个资源。

那他们怎么区分呢? 

URI包括了URL,因为URI=URL和URN

比如,一本书的编号111,这个编号就是URN。

所以该编号也可以叫做URI,因为它同样标识了一个资源,但是它不能叫做URL了,因为该编号并没有定位这个资源,我们只知道它叫什么,却不知道去哪里可以找到他。

二、HTTP请求过程

(1)请求过程

我们在网页最上面的导航栏上输入网址,按下回车,然后出现一个新网页。

这个过程就是浏览器向某网站发送了一个请求,然后网站进行处理,最后网站回馈一个响应,浏览器解析后展现出来。

(2)相关名词介绍

(注:以下名词了解即可) 

为了更好的说明该过程,我们可以鼠标右键检查功能来具体显示一下请求和响应:

然后切换到Network面板,再刷新一下网页:

即可看到很多行的东西,每一行就代表一次  请求-响应  过程

我们仔细观察这个界面的各列:

其中,各列含义如下

  • Name:请求界面的名称
  • Status:响应状态码,通过状态码显示,可以判定响应是否正常。
  • Type:请求文档的类型。
  • Initiator:请求源,用来标记是哪个对象或进程发起的请求。
  • Size:请求资源大小(如果是缓存中提取的资源,该列显示from cache)
  • Time:从发起请求到获得响应所花总时间。
  • Waterfall:网络请求可视化瀑布流。
  • (有时会有Protocol:请求协议类型,http1.1代表HTTP1.1版本,h2代表HTTP2.0版本)

若单击某列,则会显示更详细的信息:

在General部分:

  • Request URL :请求的URL
  • Request Method:请求方法
  • Status Code:响应状态码
  • Remote Address:远程服务器的地址和端口
  • Referre Policy:为判别策略
  • Response Headers:响应头
  • Request Headers:请求头

以上名词可能有些说的不太清楚,现在我们具体来看一看各部分,到底是干什么的

三、请求部分

请求,即Request。

由用户发往服务器的信息。包括四大部分:请求方法、请求网址、请求头、请求体。 

(1)请求方法

请求方法,客户端请求服务器时的方式

常见的有两种:GET请求、POST请求

比如:

GET请求

请求获取指定资源,如请求页面返回内容

当我们在浏览器最上面输入网址并按下回车,这就是发起了GET请求。

POST请求:

向指定资源提交数据,通常用于表单提交或者上传文件。

当我们登陆网站,输入账号密码后,点击提交后,这就是发起了POST请求。

那么二者有什么具体区别呢?

  1. GET请求的参数包括在URL,POST请求的数据包括在请求体中。
    所以如果打开某网站某板块某界面的某图片后,这时我们会在上面的网址中看到该图片的路径,这就是GET请求该图片的参数
  2. GET请求提交数据最大1024字节,POST请求没有限制。

所以综上,当我们提交账号密码时,最好选择POST,否则GET会将密码显示在网址中暴露哦~


当然除此之外,还有很多请求,不过并不常用,汇总如下:

  • GET:请求获取指定资源。GET 请求不应包含请求体,且一般用于获取数据。
  • POST:向指定资源提交数据,通常用于表单提交或者上传文件。POST 请求可以包含请求体,用于传送数据。
  • PUT:向指定资源上传数据,通常用于更新资源的状态。PUT 请求一般是幂等的,即多次相同的请求会得到相同的结果。
  • DELETE:请求删除指定资源。
  • PATCH:部分更新指定资源的数据。与 PUT 的区别是,PATCH 只更新资源的一部分,而 PUT 会替换整个资源。
  • HEAD:类似 GET 请求,但只获取响应的头部信息,不返回实际的资源数据。
  • OPTIONS:请求服务器,询问支持哪些 HTTP 方法。常用于跨域请求中的预检请求。

(2)请求网址

网址格式如下:

协议://主机名:端口号/路径?查询字符串#片段标识符

说明:

  • 协议(Scheme):指定访问资源所使用的协议。常见的协议包括:
    http 或 https(超文本传输协议)、
    ftp(文件传输协议)、
    mailto(用于电子邮件地址)、
    file(本地文件)
  • 主机名(Host):指定资源所在的服务器的域名或 IP 地址。
    通常为一个域名,如 www.example.com
    或者是 IP 地址,如 192.168.1.1
  • 端口号(Port)(可写可不写):指定服务器的端口,通常省略。
    默认情况下:http 默认端口为 80、https 默认端口为 443。
    如果指定了非默认端口,则需要在主机名后加上端口号,用冒号分隔,如 www.example.com:8080
  • 路径(Path):指定请求资源在服务器上的位置。
    例如,/products/123 表示访问 /products/123 这个路径的资源。
  • 查询字符串(Query)(可写可不写):以 ? 开头,包含一个或多个键值对,用于传递参数。
    例如,?id=123&name=abc,查询字符串由参数名和值组成,多个参数用 & 分隔。
  • 片段标识符(Fragment)(可写可不写):以 # 开头,指向文档中的一个特定位置。
    用于指定页面内的某个部分。例如,#section2 指向页面的第二个部分。

举个例子:

https://www.example.com:8080/products/123?id=456&color=red#review

解释: 

  • 协议:https
  • 主机名:www.example.com
  • 端口号:8080
  • 路径:/products/123
  • 查询字符串:?id=456&color=red
  • 片段标识符:#review

(3)请求头

请求头是 HTTP 请求中的一部分,它包含了关于客户端、请求以及数据的附加信息。

客户端通过它向服务器传递元数据,帮助服务器理解请求的内容、用户的偏好、客户端环境等。

举个例子:

请求头就像你在向别人请求东西时提供的一些附加信息

假设你在网上买东西,除了告诉商家你想买的产品,还会提供一些其他信息,比如:

你用的是什么设备(是手机还是电脑)

你能接受的商品类型(比如希望商品图片清晰,或者只想看某种品牌的商品)

这些附加信息就像是请求头里的内容,它们帮助商家(服务器)了解你具体的需求,确保你能收到最合适的产品。

所以你要访问一个网页,你的请求头可能包含以下信息:

(注:了解即可) 

1. Host

  • 指定请求的服务器域名或 IP 地址。从 HTTP/1.1 版本开始,这是必需的头部字段。

  • 示例:Host: www.example.com

2. User-Agent

  • 简称UA。表示发送请求的客户端软件类型(如浏览器、操作系统等)。爬虫时加上此部分可以伪装成浏览器。

  • 示例:User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36

3. Accept

  • 指定客户端能够处理的响应内容类型。通常用于指定请求的数据格式

  • 示例:Accept: text/html, application/xhtml+xml, application/xml;q=0.9, image/webp,*/*;q=0.8

4. Accept-Language

  • 告诉服务器客户端能够理解的语言。例如,可以告诉服务器希望获取中文或英文的内容。

  • 示例:Accept-Language: en-US,en;q=0.5

5. Content-Type

  • 仅在请求体中有数据时使用,指定请求体的媒体类型。例如,表单提交时,数据的格式是 application/x-www-form-urlencoded,上传文件时是 multipart/form-data

  • 示例:Content-Type: application/json

6. Authorization

  • 用于身份验证,携带认证信息,如令牌或基本认证信息。常用于需要用户验证的资源。

  • 示例:Authorization: Bearer <token>

  • 客户端向服务器发送的 Cookie 信息,服务器根据该信息识别用户状态(如登录状态)。

  • 示例:Cookie: sessionid=abc123; user=JohnDoe

8. Accept-Encoding

  • 告诉服务器客户端支持的编码方式,通常用于压缩响应体。

  • 示例:Accept-Encoding: gzip, deflate, br

9. Connection

  • 表示是否保持持久连接,决定在请求完成后是否保持与服务器的连接。

  • 示例:Connection: keep-alive

10. Referer

  • 表示来自哪个 URL 的请求,通常用于了解用户访问的来源页面。

  • 示例:Referer: https://www.example.com/previous-page

(4)请求体

请求体是 HTTP 请求中的一部分,主要用于携带客户端发送给服务器的实际数据内容。

可以理解为你在向服务器请求某项服务时,所附带的具体信息或者数据

举个例子:

如果你填写了一个网上表单,提交了你的个人信息(比如名字、地址、电子邮件等),这些信息就是通过请求体发送到服务器的。

(Tips:对于请求体来说,一般是POST请求的表单数据,对于GET请求,请求体为空)


对于请求头请求体的区别?

  • 请求头
    包含一些附加信息(比如浏览器类型、请求语言、是否有登录状态等)
    帮助服务器理解如何处理请求。
  • 请求体
    包含实际的数据内容,是请求的核心部分
    比如你提交的表单数据、上传的文件等。

四、响应部分

响应,即Response。

由服务器给用户的信息。包括三部分:响应状态码、响应头、响应体。

(1)响应状态码

就像前文所说,这就是根据给出的数字,来判定响应是否正常。

比如,200表示正常、404表示找不到等,都是常见状态码。

下面汇总了常见的状态码及错误原因:

1. 1xx:信息性状态码

这些状态码表示请求已被接收,正在继续处理。

  • 100 Continue:表示客户端可以继续发送请求的其余部分(通常用于大文件上传时,客户端先发送请求头,服务器返回 100 状态码,客户端再发送请求体)。

2. 2xx:成功状态码

这些状态码表示请求已成功被处理。

  • 200 OK:请求成功,服务器返回请求的资源。

  • 201 Created:请求成功,服务器创建了新的资源(通常用于 POST 请求)。

  • 204 No Content:请求成功,但服务器没有返回任何内容(常见于删除操作)。

3. 3xx:重定向状态码

这些状态码表示请求需要进一步的操作才能完成(通常是页面重定向)。

  • 301 Moved Permanently:请求的资源已被永久移到新的位置,响应中会带有新的 URL。

  • 302 Found:请求的资源临时移动到其他位置,客户端会按照新 URL 继续请求。

  • 304 Not Modified:资源未修改,客户端可以使用缓存的副本。

4. 4xx:客户端错误状态码

这些状态码表示请求有错误,客户端需要修正请求后再试。

  • 400 Bad Request:请求无效,服务器无法理解请求。

  • 401 Unauthorized:请求未授权,通常需要提供身份验证(如登录)。

  • 403 Forbidden:服务器拒绝请求,即使用户已认证。

  • 404 Not Found:请求的资源不存在或无法找到。

  • 405 Method Not Allowed:请求方法不被允许(例如,服务器只允许 GET 请求,但客户端使用了 POST 请求)。

5. 5xx:服务器错误状态码

这些状态码表示服务器未能完成有效请求,通常是服务器本身的问题。

  • 500 Internal Server Error:服务器遇到错误,无法完成请求。

  • 502 Bad Gateway:服务器作为网关或代理时,收到来自上游服务器的无效响应。

  • 503 Service Unavailable:服务器暂时无法处理请求,通常是因为服务器超负荷或正在维护。

  • 504 Gateway Timeout:服务器作为网关或代理时,未能在规定时间内从上游服务器获取响应。

(2)响应头

响应头是服务器在响应客户端请求时,附加在响应消息中的一些信息。

这些信息主要用于描述服务器的处理结果、返回的数据类型、缓存策略等。

可以理解为服务器对客户端请求的“回馈”信息,告诉客户端服务器的状态、资源类型等。

下面为常用响应头:

  1. Content-Type:指定响应体的内容类型(即数据的格式)。例如:

    • Content-Type: text/html:返回的是 HTML 内容。
    • Content-Type: application/json:返回的是 JSON 格式数据。
    • Content-Type: image/png:返回的是 PNG 图片。
  2. Content-Length:表示响应体的大小,以字节为单位

  3. Date:返回响应的时间戳,表示服务器响应的日期和时间

  4. Server:表示服务器的类型和版本

  5. Set-Cookie:服务器向客户端发送的 cookie,用于保存客户端的状态信息。

(3)响应体

响应体是服务器在响应客户端请求时,返回给客户端的实际数据内容。

举个例子:

比如你请求一个网页时,响应体就是返回的 HTML 内容;你请求某个数据接口时,响应体就是返回的 JSON 数据。

如下图所示:

当我们打开Preview中,看到的蓝框内的内容,就是响应体。

在爬虫时,我们要做的,就是解析它!!!

它的常见内容有:

  1. HTML 页面:如果你请求一个网页,响应体通常是该网页的 HTML 内容。
    例如,浏览器向服务器请求 https://example.com,服务器返回一个 HTML 页面,响应体就是网页的 HTML 代码。

  2. JSON 数据:在许多现代 Web 应用中,通常使用 JSON 格式。
    例如,发送一个 GET 请求到一个数据接口,返回的响应体是 JSON 数据:
    { "name": "John Doe", "age": 30 }

  3. 图片或文件:如果请求的是一个文件(如图片、视频等),响应体包含文件的内容。
    例如,浏览器请求一个 PNG 图片,服务器返回响应体,其中包含该图片的二进制数据。

  4. 文本内容:如果请求的是纯文本数据,响应体可能直接是一些文本内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/961675.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ZZNUOJ(C/C++)基础练习1011——1020(详解版)

1011 : 圆柱体表面积 题目描述 输入圆柱体的底面半径r和高h&#xff0c;计算圆柱体的表面积并输出到屏幕上。要求定义圆周率为如下宏常量 #define PI 3.14159 输入 输入两个实数&#xff0c;表示圆柱体的底面半径r和高h。 输出 输出一个实数&#xff0c;即圆柱体的表面积&…

【电工基础】2.低压带电作业定义,范围,工作要求,电工基本工具

一。低压带电作业 1.低压带电作业定义 低压带电作业是指在不停电的低压设备或低压线路上的工作。对于一些可以不停电的工作&#xff0c;没有偶然触及带电部分的危险工作&#xff0c;或作业人员使用绝缘辅助安全用具直接接触带电体及在带电设备外壳上的工作&#xff0c;均可进行…

SpringSecurity:There is no PasswordEncoder mapped for the id “null“

文章目录 一、情景说明二、分析三、解决 一、情景说明 在整合SpringSecurity功能的时候 我先是去实现认证功能 也就是&#xff0c;去数据库比对用户名和密码 相关的类&#xff1a; UserDetailsServiceImpl implements UserDetailsService 用于SpringSecurity查询数据库 Logi…

如何解压rar格式文件?8种方法(Win/Mac/手机/网页端)

RAR 文件是一种常见的压缩文件格式&#xff0c;由尤金・罗谢尔&#xff08;Eugene Roshal&#xff09;开发&#xff0c;因其扩展名 “rar” 而得名。它通过特定算法将一个或多个文件、文件夹进行压缩&#xff0c;大幅减小存储空间&#xff0c;方便数据传输与备份。然而&#xf…

锁升级过程与优化操作

前文我们学习了CAS自旋锁知道CAS对应的就是一条指令操作&#xff0c;属于一种轻量级锁&#xff0c;那么有轻必有重&#xff0c;从无锁到轻量级锁到重量级锁是一个升级过程&#xff0c;此文我们对锁升级的过程以及一些优化锁的操作一探究竟。 1. 锁升级 从前文 《程序员不可能不…

IoTDB 2025 春节值班与祝福

2025 春节快乐 瑞蛇迎吉庆&#xff0c;祥光映华年&#xff0c;2025 春节已近在眼前。社区祝福 IoTDB 的所有关注者、支持者、使用者 2025 新年快乐&#xff0c;“蛇”来运转&#xff01; IoTDB 团队的春节放假时间为 2025 年 1 月 27 日至 2 月 4 日&#xff0c;1 月 25 日、26…

neo4j-community-5.26.0 install in window10

在住处电脑重新配置一下neo4j, 1.先至官方下载 Neo4j Desktop Download | Free Graph Database Download Neo4j Deployment Center - Graph Database & Analytics 2.配置java jdk jdk 21 官网下载 Java Downloads | Oracle 中国 path: 4.查看java -version 版本 5.n…

matlab中,fill命令用法

在 MATLAB 中&#xff0c;fill 命令用于创建填充多边形的图形对象。使用 fill 可以在二维坐标系中绘制填充的区域&#xff0c;通常用于绘制图形的背景或显示数据分布。 基本语法 fill(X, Y, C)X 和 Y 是同样长度的向量&#xff0c;定义了多边形的顶点坐标。C 是颜色&#xff0…

ThinkPHP 8 操作JSON数据

【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书 使用VS Code开发ThinkPHP项目-CSDN博客 编程与应用开…

Java—三种遍历方式

迭代器遍历 特点&#xff1a;迭代器不依赖素引 迭代器使用案例一般在集合中使用 import java.util.ArrayList; import java.util.Collection; import java.util.Iterator;public class text1 {public static void main(String[] args) {Collection<String> collnew Arr…

线性调整器——耗能型调整器

线性调整器又称线性电压调节器&#xff0c;以下是关于它的介绍&#xff1a; 基本工作原理 线性调整器的基本电路如图1.1(a)所示,晶体管Q1(工作于线性状态,或非开关状态)构成一个连接直流源V和输出端V。的可调电气电阻,直流源V由60Hz隔离变压器&#xff08;电气隔离和整流&#…

leetcode——二叉树的最大深度(java)

给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3 示例 2&#xff1a; 输入&#xff1a;root [1,null,2] 输…

K8S中高级存储之PV和PVC

高级存储 PV和PVC 由于kubernetes支持的存储系统有很多&#xff0c;要求客户全都掌握&#xff0c;显然不现实。为了能够屏蔽底层存储实现的细节&#xff0c;方便用户使用&#xff0c; kubernetes引入PV和PVC两种资源对象。 PV&#xff08;Persistent Volume&#xff09; PV是…

IVD设备-GB4793.1 安规理解笔记

IVD设备-GB4793.1 安规理解笔记 参考国标文档 GB4793.1接地电阻试验试验通过的标准 耐压试验试验通过的标准 浮地危险带电部分与可触及导电零部件之间耐压试验通过的标准 参考国标文档 GB4793.1 接地电阻试验 图1GB 4793.1-2007标准 附录F.2 ⌘根据F.1要求内容是关保护接地电…

“AI视频智能分析系统:让每一帧视频都充满智慧

嘿&#xff0c;大家好&#xff01;今天咱们来聊聊一个特别厉害的东西——AI视频智能分析系统。想象一下&#xff0c;如果你有一个超级聪明的“视频助手”&#xff0c;它不仅能自动识别视频中的各种元素&#xff0c;还能根据内容生成详细的分析报告&#xff0c;是不是感觉特别酷…

002-基于Halcon的图像几何变换

本节将简要介绍Halcon中有关图像几何变换的基本算子及其应用&#xff0c;主要涉及五种常见的二维几何变换形式&#xff1a;平移、镜像、旋转、错切和放缩。这几种变换可归结为一类更高级更抽象的空间变换类型&#xff0c;即仿射变换&#xff08;Affine transformation&#xff…

七、深入了解SpringBoot的配置文件

一、配置端口号 通过配置文件application.properties配置修改端口号 修改 application.properties 文件 #端口号修改成 9090 server.port9090运行结果&#xff0c;观察日志 二、配置文件格式 Spring Boot 配置⽂件有以下三种&#xff1a; • application.properties • ap…

【Kubernetes】Pod生命周期、初始化容器、主容器

一、Pod生命周期 Pod从创建到终止退出的时间范围称为Pod生命周期。 1、生命周期重要流程 创建基础容器&#xff08;pause container&#xff09;初始化容器&#xff08;init-X Containers&#xff09;主容器&#xff08;container&#xff09;启动后的钩子(post-start)启动探…

网络爬虫学习:应用selenium获取Edge浏览器版本号,自动下载对应版本msedgedriver,确保Edge浏览器顺利打开。

一、前言 我从24年11月份开始学习网络爬虫应用开发&#xff0c;经过2个来月的努力&#xff0c;于1月下旬完成了开发一款网络爬虫软件的学习目标。这里对本次学习及应用开发进行一下回顾总结。 前几天我已经发了一篇日志&#xff08;网络爬虫学习&#xff1a;应用selenium从搜…

python学opencv|读取图像(四十九)原理探究:使用cv2.bitwise()系列函数实现图像按位运算

【0】基础定义 按位与运算&#xff1a;两个等长度二进制数上下对齐&#xff0c;全1取1&#xff0c;其余取0。 按位或运算&#xff1a;两个等长度二进制数上下对齐&#xff0c;有1取1&#xff0c;其余取0。 按位异或运算&#xff1a; 两个等长度二进制数上下对齐&#xff0c;相…