【补充】HTTP请求、浏览器开发者工具的使用、socket

1 HTTP请求

1 HTTP请求方法

作用:让协议清楚的知道,客户端发送了一个什么类型的‘动作指令’

方 法描 述
GET请求页面,并返回页面内容
HEAD类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
POST大多用于提交表单或上传文件,数据包含在请求体中
PUT从客户端向服务器传送的数据取代指定文档中的内容
DELETE请求服务器删除指定的页面
CONNECT把服务器当作跳板,让服务器代替客户端访问其他网页
OPTIONS允许客户端查看服务器的性能
TRACE回显服务器收到的请求,主要用于测试或诊断

2 HTTP请求头

Host(主机和端口号)
Connection(链接类型)
Upgrade-Insecure-Requests(升级为HTTPS请求)
User-Agent(浏览器名称)
Accept(传输文件类型)
Referer(页面跳转处)
Accept-Encoding(文件编解码格式)
Cookie(Cookie)
x-requested-withXMLHttpRequest (表示该请求是Ajax异步请求)

3 HTTP请求体

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

4 HTTP响应

响应,由服务端返回给客户端,可以分为三部分:响应状态码(Response Status Code)、响应头 (Response Headers)和响应体(Response Body)。

4.1 HTTP响应状态码

响应状态码表示服务器的响应状态,如 200 代表服务器正常响应,404 代表页面未找到,500 代表服务器内部发生错误。在爬虫中,我们可以根据状态码来判断服务器响应状态,如状态码为 200,则证明成功返回数据,再进行进一步的处理,否则直接忽略。

4.2 HTTP常见的状态码及其原因

状态码说 明详 情
100继续请求者应当继续提出请求。服务器已收到请求的一部分,正在等待其余部分
101切换协议请求者已要求服务器切换协议,服务器已确认并准备切换
200成功服务器已成功处理了请求
201已创建请求成功并且服务器创建了新的资源
202已接受服务器已接受请求,但尚未处理
203非授权信息服务器已成功处理了请求,但返回的信息可能来自另一个源
204无内容服务器成功处理了请求,但没有返回任何内容
205重置内容服务器成功处理了请求,内容被重置
206部分内容服务器成功处理了部分请求
300多种选择针对请求,服务器可执行多种操作
301永久移动请求的网页已永久移动到新位置,即永久重定向
302临时移动请求的网页暂时跳转到其他页面,即暂时重定向
303查看其他位置如果原来的请求是 POST,重定向目标文档应该通过 GET 提取
304未修改此次请求返回的网页未修改,继续使用上次的资源
305使用代理请求者应该使用代理访问该网页
307临时重定向请求的资源临时从其他位置响应
400错误请求服务器无法解析该请求
401未授权请求没有进行身份验证或验证未通过
403禁止访问服务器拒绝此请求
404未找到服务器找不到请求的网页
405方法禁用服务器禁用了请求中指定的方法
406不接受无法使用请求的内容响应请求的网页
407需要代理授权请求者需要使用代理授权
408请求超时服务器请求超时
409冲突服务器在完成请求时发生冲突
410已删除请求的资源已永久删除
411需要有效长度服务器不接受不含有效内容长度标头字段的请求
412未满足前提条件服务器未满足请求者在请求中设置的其中一个前提条件
413请求实体过大请求实体过大,超出服务器的处理能力
414请求 URI 过长请求网址过长,服务器无法处理
415不支持类型请求格式不被请求页面支持
416请求范围不符页面无法提供请求的范围
417未满足期望值服务器未满足期望请求标头字段的要求
500服务器内部错误服务器遇到错误,无法完成请求
501未实现服务器不具备完成请求的功能
502错误网关服务器作为网关或代理,从上游服务器收到无效响应
503服务不可用服务器目前无法使用
504网关超时服务器作为网关或代理,但是没有及时从上游服务器收到请求
505HTTP 版本不支持服务器不支持请求中所用的 HTTP 协议版本

4.3 HTTP响应头

响应头包含了服务器对请求的应答信息,如 Content-Type、Server、Set-Cookie 等。下面简要说明一

些常用的头信息。

  • Date:标识响应产生的时间。
  • Last-Modified:指定资源的最后修改时间。
  • Content-Encoding:指定响应内容的编码。
  • Server:包含服务器的信息,比如名称、版本号等。
  • Content-Type:文档类型,指定返回的数据类型是什么,如 text/html 代表返回 HTML 文档,
  • application/x-javascript 则代表返回 JavaScript 文件,image/jpeg 则代表返回图片。
  • Set-Cookie:设置 Cookies。响应头中的 Set-Cookie 告诉浏览器需要将此内容放在 Cookies 中,下次请求携带 Cookies 请求。
  • Expires:指定响应的过期时间,可以使代理服务器或浏览器将加载的内容更新到缓存中。如果再次访问时,就可以直接从缓存中加载,降低服务器负载,缩短加载时间。

2 浏览器开发者工具的使用

1. 开发者工具打开的方式与语言设置(推荐使用Chrome浏览器)

  • (1)在对应网页页面,右键网站----选择“检查”选项
  • (2)按“F12”按钮
  • (3)点击浏览器右上角‘设置按钮’–>点击更多工具’'–>在点击"开发者工具"

将开发者工具的语言设置成中文:打开开发者工具后点击设置图标 – 在外观一栏将语言设置成中文

2.开发者工具各个标题的作用

  • 第一框:定位元素代码位置,方便快速选中html标签信息(也可以直接在你想看的数据鼠标右击点击检查)

  • 第二个框:是用于屏幕适配的,也就是传说中的chrom能够调试各种移动设备的屏幕分辨率。

  • 元素面板:该标签使用来查看页面的HTML标签元素的,能够也就是查看源码,我们可以看到布局,可以看到用到的样式,还有用到的链接等等。

  • 控制台面板:这个就是一个web控制台

  • 源代码面板:这个是显示资源文件的

    1. 该选择框使用来选择资源的,当网页被加载的时候向服务器端请求出来的文件包括.html .ccs .js这样的文件
    2. 这个地方使用来调试js代码的地方,这个非常重要,看到行号上面有蓝色的标签,这个标签就是断点,当我们需要调试程序的时候打一个断点,然后通过3这个工具栏进行调试,那么调试过程就不详细解释,也就是打一个断点然后刷新页面程序会调到你打断点的地方,然后通过4来查看程序中变量的值什么的。
    3. 3中的标签,第一个是停止状态的按钮就是表示程序是否停止(在debug时),后面的是程序继续跳过方法,跳过下一个语句,调到上一个语句
    4. 配合debug模式来展示调用的参数信息和调用的栈堆函数
  • 网络面板:这个就是抓包常用的工具,可以拦截客户端和服务端的交互数据信息

    1. 控制器 控制网络的外观和功能。
    2. 过滤器 控制请求表具体显示哪些内容。
    3. 概述 显示获取到资源的时间轴信息。
    4. 请求表 按资源获取的前后顺序显示所有获取到的资源信息,点击资源名可以查看该资源的详细信息。
    5. 摘要 显示总的请求数、数据传输量、加载时间信息。
  • 网络面板的请求资源面板

    1. 名称 资源名称,点击名称可以查看资源的详情情况,包括Headers、Preview、Response、Cookies、Timing。
    2. 状态 HTTP状态码。
    3. 类型 请求的资源MIME类型。
    4. 启动器 标记请求是由哪个对象或进程发起的(请求源)。
    5. 大小 从服务器下载的文件和请求的资源大小。如果是从缓存中取得的资源则该列会显示(from cache)
    6. 时间 请求或下载的时间,从发起Request到获取到Response所用的总时间。
    7. 瀑布 显示所有网络请求的可视化瀑布流(时间状态轴),点击时间轴,可以查看该请求的详细信息,点击列头则可以根据指定的字段可以排序。
  • 查看具体的资源请求
    通过点击某个资源的Name可以查看该资源的详细信息,根据选择的资源类型显示的信息也不太一样,可能包括如下Tab信息:

    1. 表头 该资源的HTTP头信息。

      在Headers标签里面可以看到URL、请求方法、状态码、远程地址 等基本信息和详细的http响应头、http请求头等信息。

    2. 载荷 请求地址的查询关键字和post请求携带的参数信息

    3. 预览 根据你所选择的资源类型(JSON、图片、文本)显示相应的预览。

    4. 响应 显示HTTP的Response信息。

    5. 启动器 标记请求是由哪个对象或进程发起的(请求源)

    6. 时间 显示资源在整个请求生命周期过程中各部分花费的时间。

    7. Cookies 显示资源HTTP的Request和Response过程中的Cookies信息。

      如果选择的资源在Request和Response过程中存在Cookies信息,则Cookies标签会自动显示出来,在里面可以查看所有的Cookies信息。

3 会话和Cookies

在浏览网站的过程中,我们经常会遇到需要登录的情况,有些页面只有登录之后才可以访问,
而且登录之后可以连续访问很多次网站,但是有时候过一段时间就需要重新登录。
还有一些网站,在打开浏览器时就自动登录了,而且很长时间都不会失效,这种情况又是为什么?
其实这里面涉及会话(Session)和 Cookies 的相关知识,本节就来揭开它们的神秘面纱

1 无状态 HTTP

在了解会话和 Cookies 之前,我们还需要了解 HTTP 的一个特点,叫作无状态。

  1. 会话

    会话,其本来的含义是指有始有终的一系列动作 / 消息。比如,打电话时,从拿起电话拨号到挂断电话这中间的一系列过程可以称为一个会话。

  2. Cookies

    Cookies 指某些网站为了辨别用户身份、进行会话跟踪而存储在用户本地终端上的数据。

  3. Cookies 列表

    • Name,即该 Cookie 的名称。Cookie 一旦创建,名称便不可更改
    • Value,即该 Cookie 的值。如果值为 Unicode 字符,需要为字符编码。如果值为二进制数据,则需要使用 BASE64 编码。
    • Max Age,即该 Cookie 失效的时间,单位秒,也常和 Expires 一起使用,通过它可以计算出其有效时间。Max Age 如果为正数,则该 Cookie 在 Max Age 秒之后失效。如果为负数,则关闭浏览器时 Cookie 即失效,浏览器也不会以任何形式保存该 Cookie。
    • Path,即该 Cookie 的使用路径。如果设置为 /path/,则只有路径为 /path/ 的页面可以访问该 Cookie。如果设置为 /,则本域名下的所有页面都可以访问该 Cookie。
    • Domain,即可以访问该 Cookie 的域名。例如如果设置为 .zhihu.com,则所有以zhihu.com,结尾的域名都可以访问该 Cookie。
    • Size 字段,即此 Cookie 的大小。
    • Http 字段,即 Cookie 的 httponly 属性。若此属性为 true,则只有在 HTTP Headers 中会带有此 Cookie 的信息,而不能通过 document.cookie 来访问此 Cookie。
    • Secure,即该 Cookie 是否仅被使用安全协议传输。安全协议。安全协议有 HTTPS,SSL 等,在网络上传输数据之前先将数据加密。默认为 false

4 socket介绍

1.什么是socket?

参考博客:什么是 Socket?
Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。

三次握手 四次挥手

包与包之间的交换 TCP 协议

在这里插入图片描述

方法描述
connect( (host,port) )host代表服务器主机名或IP,port代表服务器进程所绑定的端口号。
send发送请求信息
recv接收数据

2.案列:使用socket下载一张图片

import socket
import re

# 获取到资源地址
url = 'http://image11.m1905.cn/uploadfile/2021/0922/thumb_0_647_500_20210922030733993182.jpg'
# 创建套接字对象
client = socket.socket()
# 创建连接
client.connect(('image11.m1905.cn', 80))
# 构造http请求
http_res = 'GET ' + url + ' HTTP/1.0\r\nHost: image11.m1905.cn\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36\r\n\r\n'
# 发送请求
client.send(http_res.encode())
# 建立一个二进制对象用来存储我们得到的数据
result = b''
data = client.recv(1024)
# 循环接收响应数据 添加到bytes类型
while data:
    result += data
    data = client.recv(1024)
print(result)
# 提取数据
# re.S使 . 匹配包括换行在内的所有字符 去掉响应头
images = re.findall(b'\r\n\r\n(.*)', result, re.S)
# print(images[0])
# 打开一个文件,将我们读取到的数据存入进去,即下载到本地我们获取到的图片
with open('hello.png', 'wb')as f:
    f.write(images[0])

注意

HTTP1.0HTTP1.1协议中都有对KeepAlive的支持。
 其中HTTP1.0需要在请求头中增加”Connectionkeep-aliveheader才能够支持。所以默认情况下,
 Http1.1Keep-alive,接收完一个报文后,TCP连接不关闭,Receive()还在等待接收数据而不返回;
 如果HTTP1.1版本的HTTP请求报文不希望使用长连接,则要在HTTP请求报文首部加上Connection: close
  • 17
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值