请求
由客户端发往服务器,分为四个部分:请求头,请求方法,请求网址URL,请求体。当我们在浏览器中输入一个网址或点击一个链接时,浏览器会向服务器发送请求,请求获取指定的资源,比如 HTML 页面、CSS 文件、JavaScript 文件、图片、视频等等。
网络请求过程通常包括以下几个步骤:
- DNS 查询:浏览器首先需要将域名解析为 IP 地址,这个过程叫做 DNS 查询。
- 建立连接:浏览器与服务器建立连接,可以是 HTTP 连接、HTTPS 连接、WebSocket 连接等。
- 发送请求:浏览器向服务器发送请求,请求方式包括 GET、POST、PUT、DELETE 等。
- 接收响应:服务器处理请求后,会返回一个响应,包括状态码、响应头和响应体等信息。
- 处理响应:浏览器接收到响应后,根据响应内容进行相应的处理,比如渲染 HTML 页面、显示图片或视频等。
通过网络请求,客户端可以与服务器交互,获取所需的数据和资源。在前端开发中,我们通常使用 AJAX 或 Fetch 等技术来发送网络请求,从而实现异步加载数据、动态更新页面等功能。
请求方法
在 HTTP 协议中,请求方法指的是客户端向服务器发起请求的方式。常见的 HTTP 请求方法有 GET、POST、PUT、DELETE 等。
GET 和 POST 是最常用的 HTTP 请求方法之一,它们的主要区别在于:
- 参数传递方式不同:GET 请求将参数编码在 URL 中,而 POST 请求则将参数放在请求体中。
- 请求的语义不同:GET 请求用于获取资源,通常不应该产生副作用(即不会改变资源状态),而 POST 请求则用于提交数据,可能会改变服务器上的资源状态。
- 安全性不同:GET 请求的参数暴露在 URL 中,可能会被第三方截获,而 POST 请求的参数放在请求体中,相对安全。
具体来说,GET 请求常用于数据的查询和读取,而 POST 请求常用于数据的提交和修改。在实际开发中,我们需要根据具体的业务需求来选择合适的请求方法。
除了 GET 和 POST,还有 PUT 和 DELETE 等请求方法,它们分别用于更新和删除资源。这些请求方法的使用需要遵循 HTTP 协议规范,保证服务器能够正确处理请求并返回合适的响应。
请求头
请求头(Request Header)是客户端向服务器发送请求时,携带的一些额外信息,用来描述请求的各种属性和要求。
常见的请求头参数包括:
- User-Agent:表示浏览器的类型,供服务器识别。编写爬虫时如果加上此信息,可以伪装成浏览器,如果不加很可能被识别为爬虫,从而拒绝正确响应请求。
- Accept:指定客户端可接受的 MIME 类型(比如 text/html、application/json 等)。
- Authorization:用于身份验证,通常包括用户名和密码。
- Referer:表示请求来源的 URL,常用于防盗链和统计分析。
- Content-Type:表示请求体的 MIME 类型,常用于指定表单数据的编码方式。在http协议的消息头中,它可以用来表示具体请求的媒体类型信息。例如,text/html代表HTML格式;image/gif代表GIF图片;application/json代表JSON类型
- Cookie:表示客户端的会话信息,通常用于保持用户登录状态。在一些需要登录之后才有权限请求到的资源,很多都通过cookie内的信息,同时与服务器端的session信息对应,校验用户的登录状态。
请求网址
请求的网址我们一般将其称为URL
URL(Uniform Resource Locator,统一资源定位符)是互联网上用于定位和访问资源的地址。它由协议、域名(或IP地址)、端口号(可选)、路径、查询参数和片段组成。
具体来说,一个URL的组成如下:
- 协议:指定客户端与服务器之间通信的协议类型,如http、https、ftp等。
- 域名或IP地址:标识了资源所在的服务器,可以是域名或IP地址形式。如果是域名形式,需要通过DNS解析转换为IP地址。
- 端口号:默认为80端口,但是如果服务器开启了其他端口,需要指定相应的端口号进行访问。
- 路径:指定服务器上资源所在的路径,例如 /images/logo.png。
- 查询参数:向服务器传递一些特定的参数,格式为?key1=value1&key2=value2。可以通过"?“和”&"符号与URL路径分隔符相连接。
- 锚点: 指在网页内部设置的一个跳转点,用户可以通过点击链接或执行 JavaScript 等方式跳转到锚点所在的位置。锚点通常通过在 URL 中添加 # 号及其后面的文本来定义
下面是一个具体的url示例:
https://www.example.com:8080/path/to/resource?param1=value1¶m2=value2
- 协议为 https。
- 主机名为 www.example.com。
- 端口号为 8080,因为 https 默认使用端口号 443。
- 路径为 /path/to/resource。
- 查询字符串为 param1=value1¶m2=value2。
- 锚点为 section1,用于在网页内部跳转。
请求体
用于在客户端向服务器发送数据。一般情况下,请求体主要用于 POST、PUT、PATCH 等请求方法,以及一些需要向服务器传递数据的特殊请求。请求体的内容格式通常取决于请求的具体类型和服务器的要求。常见的请求体格式包括 JSON、XML、form 表单等。
POST /api/users HTTP/1.1
Host: example.com
Content-Type: application/json
{
"name": "Alice",
"email": "alice@example.com",
"password": "123456"
}
在这个示例中,请求方法为 POST,目标 URL 为 /api/users,请求头中指定了请求体的内容类型为 application/json。请求体的内容为一个 JSON 对象,包含了用户的姓名、邮箱和密码信息。
响应
响应是由服务器发送的数据,用于响应客户端的请求。通常,响应包含响应头、响应状态码和响应体。
响应状态码
响应状态码是指服务器在处理请求后返回的三位数的代码。常见的响应状态码包括:
- 200 OK:请求成功。
- 201 Created:请求已经被实现,资源已经被创建。
- 301 Moved Permanently:请求的URL已经移动到新的URL。
- 400 Bad Request:请求出现语法错误。
- 403 Forbidden:服务器拒绝请求。
- 404 Not Found:请求的资源不存在。
- 500 Internal Server Error:服务器遇到错误,无法完成请求。
响应体
响应中的主体数据,通常是以HTML、JSON、XML或二进制数据等格式返回。响应体的内容取决于客户端请求的资源类型和服务器响应的资源内容。例如,如果请求的资源是HTML页面,则响应体将包含HTML代码,如果请求的资源是图像,则响应体将包含图像数据。
响应头
响应头是HTTP响应中的元数据,用于提供关于响应的其他信息。常见的响应头参数包括Content-Type、Content-Length、Server、Set-Cookie等
Set-Cookie
Set-Cookie 头信息通常由服务器设置,并将其附加在 HTTP 响应头中。它可以将包含有关用户会话信息的数据存储在客户端,如用户的身份验证状态、偏好设置等。
Set-Cookie 头信息通常包括以下属性:
- Name:cookie 的名称
- Value:cookie 的值
- Expires:cookie 的过期时间
- Domain:cookie 可用的域名
- Path:cookie 可用的路径
- Secure:cookie 是否仅通过安全连接发送
- HttpOnly:是否只能通过 HTTP 协议访问 cookie
例如,以下是一个 Set-Cookie 的示例:
Set-Cookie: sessionId=abc123; Expires=Sat, 27 Feb 2023 06:30:00 GMT; Domain=example.com; Path=/; Secure; HttpOnly
这个 Set-Cookie 头信息告诉客户端存储一个名为 sessionId 的 cookie,值为 abc123。它将在 2023 年 2 月 27 日 6:30:00 GMT 过期,并且只能通过安全连接发送,只能通过 HTTP 访问,并且可用于 example.com 域的整个路径。
requests 发送请求
import requests
response = requests.get(url, params=None, **kwargs)
- url: 要发送请求的URL
- params (可选): 一个字典或字节序列,作为请求参数发送到URL中
- **kwargs: 可选参数,可以是headers、data、json等。
处理响应
response.status_code
response.content
response.text
response.json()
response.headers
爬虫的请求发送时通过python的第三方库requests实现的。本文介绍的requests的用法只是冰山一角,更多的requests库用法可以参考这篇文章
或者官方文档
文中使用到的接口分析技术其实就是我们俗称的抓包,由于本人的水平有限,我的抓包过程描述可能不是很清晰,更多的抓包技巧与训练,我们可以参考这篇文章谷歌浏览器抓包。
如果你还有其他的问题,欢迎给我私信。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)