http协议叫做超文本传输协议,他可是互联网的基石,在外面访问服务器时候。
http定义了一下规则。
请求方法:GET请求非常常见,也可以用脚本/post/put/delete/gzip(压缩不做介绍)等
请求头:content-type用于指示请求或响应中数据的媒体类型/user-agent请求设备/Content-Length:请求主体的字节长度。
客户端响应状态码:200/403/502等
HTTP(Hypertext Transfer Protocol)是一种在计算机网络中用于传输超媒体文档的应用层协议。HTTP 协议定义了客户端和服务器之间的通信规则,并规定了客户端向服务器发送请求时需要采用的请求方法(请求方式)。
常见的 HTTP 请求方式有四种:
POST(添加)
GET(查询)
DELETE(删除)
PUT(修改)
下面将分别对这四种请求方式进行详细介绍。
POST 请求用于向指定资源提交数据,通常会导致服务器端的状态发生变化。例如,在 Web 表单中填写用户信息并提交时,就是使用 POST 请求方式将表单数据提交到服务器存储。
使用 POST 请求方式提交的数据会被包含在请求体中,而不像 GET 请求方式那样包含在 URL 中。因此,POST 请求可以提交比 GET 更大的数据量,并且相对更安全。
下面是一个 POST 请求的例子:
POST /api/user HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 123
{
"name": "John Doe",
"email": "[email protected]",
"age": 30
}
上述代码表示向 example.com 的 /api/user 资源发送一个 POST 请求,请求体中包含了一个 JSON 格式的用户信息。
GET 请求用于向指定资源发出请求,请求中包含了资源的 URL 和请求参数。服务器端通过解析请求参数来返回相应的资源,不会修改服务器端的状态。
使用 GET 请求方式提交的数据会被包含在 URL 中,因此易于被缓存和浏览器保存,但也因此不适合用于提交敏感数据。
下面是一个 GET 请求的例子:
GET /api/user?id=123 HTTP/1.1
Host: example.com
上述代码表示向 example.com 的 /api/user 资源发送一个 GET 请求,请求参数中包含了用户的 ID。
可以被缓存抗下如cdn
DELETE 请求用于请求服务器删除指定的资源,可以理解为对服务器上的资源进行删除操作。使用 DELETE 方式请求会导致指定的资源被永久删除,因此需要谨慎使用。
下面是一个 DELETE 请求的例子:
DELETE /api/user?id=123 HTTP/1.1
Host: example.com
HTTP 请求:在 POST 或 PUT 请求中,Content-Type 指定请求体的数据格式。例如,发送 JSON 数据:
确定需要用什么解密
POST /api/data HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 123
{
"name": "John",
"age": 30
}HTTP 响应:服务器通过 Content-Type 指定返回数据的类型。例如,返回 HTML 页面:
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 5678
<!DOCTYPE html>
<html>
<head><title>Example</title></head>
<body><h1>Hello, World!</h1></body>
</html>
总结正确设置 Content-Type 是确保客户端和服务器能够正确解析和处理数据的关键。通过合理使用该头字段,可以提升网络应用的可靠性、兼容性和用户体验。
Content-Type(内容类型),一般是指网页中存在的 Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些 PHP 网页点击的结果却是下载一个文件或一张图片的原因。
Content-Type 标头告诉客户端实际返回的内容的内容类型。
语法格式:
Content-Type: text/html; charset=utf-8
Content-Type: multipart/form-data; boundary=something
常见的媒体格式类型如下:
text/html : HTML格式
text/plain :纯文本格式
text/xml : XML格式
image/gif :gif图片格式
image/jpeg :jpg图片格式
image/png:png图片格式
以application开头的媒体格式类型:
application/xhtml+xml :XHTML格式
application/xml: XML数据格式
application/atom+xml :Atom XML聚合格式
application/json: JSON数据格式
application/pdf:pdf格式
application/msword : Word文档格式
application/octet-stream : 二进制流数据(如常见的文件下载)
在HTTP协议中,服务器可以使用Content-Encoding头来指示响应数据的压缩方式,例如gzip。客户端在发送请求时,可以使用Accept-Encoding头来声明它支持的压缩方法,例如gzip和deflate。
GET /index.html HTTP/1.1
Host: www.example.com
Accept-Encoding: gzip, deflate服务器接收到请求后,会根据客户端支持的压缩方法对响应数据进行压缩,并在响应头中包含Content-Encoding字段。
HTTP/1.1 200 OK
Content-Encoding: gzip
Content-Length: 1234
Content-Type: text/html客户端接收到响应后,会根据Content-Encoding字段的信息解压数据,并显示网页内容
将获取到的 User-Agent 字段构造成字典形式,并在 HTTP 请求中使用。例如
# 定义 User-Agent
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36'
headers = {'User-Agent': user_agent}
# 发起请求
response = requests.get('https://example.com', headers=headers)
print(response.text)
User-Agent 的组成结构
User-Agent 通常由以下部分组成:
Mozilla/5.0:历史遗留部分,几乎所有 User-Agent 都包含此字段。
操作系统信息:如 Windows NT 10.0 表示 Windows 10 系统,X11; Linux x86_64 表示 Linux 系统。
引擎版本:如 AppleWebKit/537.36,表示浏览器的渲染引擎。
浏览器版本:如 Chrome/81.0.4044.113,表示浏览器的具体版本。
通过理解 User-Agent 的结构,可以根据需要自定义字段内容,以适应不同的爬虫场景。
这些状态码表示请求已接收,需继续处理。例如:
100 Continue:请求可继续。tcp握手。
101 Switching Protocols:服务器同意切换协议。如确认https链接tls版本。
成功响应 (200–299)
表示请求成功处理。例如:
200 OK:请求成功,常用于 GET 和 POST 请求。
201 Created:资源已成功创建。
204 No Content:请求成功但无返回内容。
重定向消息 (300–399)
表示资源位置发生变化。例如:
301 Moved Permanently:资源永久移动到新位置。
302 Found:资源临时移动。
304 Not Modified:资源未修改,可使用缓存。
客户端错误响应 (400–499)
表示请求有错误。例如:
400 Bad Request:请求语法错误。
401 Unauthorized:需要身份验证。
403 Forbidden:无权限访问资源。
404 Not Found:资源未找到。
服务端错误响应 (500–599)
表示服务器处理请求时发生错误。例如:
500 Internal Server Error:服务器内部错误。
502 Bad Gateway:网关收到无效响应。
503 Service Unavailable:服务器暂时不可用。
常见响应头
响应头提供额外信息,例如:
Content-Type:返回内容的 MIME 类型。
Content-Length:响应体的字节长度。
Cache-Control:缓存策略。
Location:重定向的目标地址。