html网站成品下载上海网站排名优化公司
目录
- 前言
- 一. 什么是 Web 请求响应?
- 1. Web 请求
- 2. Web 响应
- 3. HTTP 协议概述
- 4. 常见的 HTTP 状态码
- 二. Python 的 requests 库
- 1. 安装 requests 库
- 2. 发送 GET 请求
- 3. 发送 POST 请求
- 4. 处理响应头和状态码
- 5. 发送带查询参数的 GET 请求
- 6. 发送带表单的 POST 请求
- 三. 处理 JSON 响应
- 四. 文件操作
- 1. 打开文件的模式
- (1)常见的文件打开模式
- (2)示例:打开文件并使用模式
- 2. 读取文件
- (1)read()方法
- (2)readline()方法
- (3)readlines()方法
- 3. 写入文件
- (1)使用 write()方法写入文件
- (2)使用 writelines()方法写入多行数据
- 4. 下载文件示例
- 5. 文件操作中的注意事项
- 6. 其他常见文件操作
- (1)获取文件信息
- (2)删除文件
- 五. 错误处理与异常捕获
- 1. try 语句的使用
- 2. 示例:捕获常见异常
前言
随着互联网的发展,Web应用已成为日常生活的重要组成部分。从浏览器访问网页到移动应用获取数据,Web 请求和响应无处不在。Web 请求是指客户端(如浏览器、应用程序)通过网络向服务器请求资源,而 Web 响应则是服务器返回的数据。理解如何通过编程实现 Web 请求与响应,对于开发 Web 爬虫、API接口调用以及数据交互至关重要。
一. 什么是 Web 请求响应?
Web 请求与响应是 Web 通信的基础。Web 请求由客户端发起,服务器处理后返回响应
1. Web 请求
Web 请求
通常包括以下几个部分:
请求 | 含义 |
---|---|
请求行 | 包括请求方法 (如 GET、POST、PUT、DELETE)、URL和 HTTP 协议版本(如 HTTP/1.1) |
请求头 | 包含关于客户端信息、请求体类型、浏览器类型等的元数据 |
请求体 | 在 POST请求中包含用户提交的数据,如表单数据或文件 |
2. Web 响应
Web 响应
由服务器返回,通常包括以下几个部分:
响应 | 含义 |
---|---|
响应行 | 包括 HTTP 协议版本、状态码和状态消息 |
响应头 | 包括关于响应的信息,如内容类型、服务器信息 |
响应体 | 包含实际返回的数据(如 HTML页面、JSON数据 |
3. HTTP 协议概述
HTTP (Hypertext Transfer Protocol)
是Web上传输数据的协议,负责浏览器与服务器之间的通
信
常见的 HTTP 方法有:
方法 | 含义 |
---|---|
GET | 请求服务器获取资源,通常用于读取数据 |
POST | 提交数据到服务器,通常用于表单提交、文件上传 |
PUT | 更新服务器上的资源 |
DELETE | 删除服务器上的资源 |
4. 常见的 HTTP 状态码
状态码 | 含义 |
---|---|
200 OK | 请求成功,服务器返回所请求的数据 |
301 Moved Permanently | 资源已永久移动 |
404 Not Found | 请求的资源不存在 |
500 Internal Server Error | 服务器内部错误 |
二. Python 的 requests 库
Python的requests 库是发送 HTTP 请求和处理响应的最常用工具, 它提供了简单、直观的 API使得 Web 请求和响应的操作变得非常容易。通过requests,我们可以轻松地发送 GET、POST请求处理JSON 响应,管理请求头等
1. 安装 requests 库
在使用requests 之前,我们需要先安装它。如果你没有安装,可以通过以下命令安装:
[root@localhost ~]# pip3 install requests
2. 发送 GET 请求
GET 请求通常用于获取数据。我们通过requests.get()来发送 GET请求,并可以处理返回的响应
[root@localhost ~]# python3
Python 3.11.6 (main, Dec 18 2024, 22:06:12) [GCC 12.3.1 (openEuler 12.3.1-62.oe2403sp1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>>
代码解释:
语句 | 含义 |
---|---|
requests.get() | 用于发送 GET 请求,获取指定 URL的数据 |
response.status code | 获取 HTTP 响应状态码 |
response.text | 获取响应的正文内容(通常是 HTML或 JSON数据) |
response.headers | 获取响应头 |
len(response.text) | 返回响应正文的长度,帮助我们了解返回内容的大小 |
3. 发送 POST 请求
POST 请求用于将数据提交到服务器,通常用于表单提交或上传文件。我们使用requests.post()来发送 POST 请求
[root@localhost ~]# python3
Python 3.11.6 (main, Dec 18 2024, 22:06:12) [GCC 12.3.1 (openEuler 12.3.1-62.oe2403sp1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>>
代码解释:
语句 | 含义 |
---|---|
requests.post() | 用于发送 POST请求,将数据提交到服务器 |
data | 是一个字典,包含了我们要提交的数据.requests 会自动将其编码为application/x-www-fomm-urlencoded 格式 |
response.json() | 用于解析返回的 JSON数据 |
4. 处理响应头和状态码
响应头提供了关于服务器的信息,状态码则告诉我们请求是否成功。我们可以通过response.headers 获取响应头,通过response.status code 获取状态码
[root@localhost ~]# python3
Python 3.11.6 (main, Dec 18 2024, 22:06:12) [GCC 12.3.1 (openEuler 12.3.1-62.oe2403sp1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>>
代码解释:
语句 | 含义 |
---|---|
response.headers | 返回响应头,包含如 Content-Type、Date、Server 等信息 |
response.status code | 返回 HTTP 状态码 |
response.headers.get('Content-Type") | 获取响应的内容类型(如 text/html、 application/json) |
5. 发送带查询参数的 GET 请求
在 GET 请求中,我们可以通过 URL传递查询参数。例如,访问一个包含参数的 URL
[root@localhost ~]# python3
Python 3.11.6 (main, Dec 18 2024, 22:06:12) [GCC 12.3.1 (openEuler 12.3.1-62.oe2403sp1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>>
代码解释:
语句 | 含义 |
---|---|
params | 是一个字典,包含要传递的査询参数。requests.get()会自动将这些参数编码到 URL中 |
6. 发送带表单的 POST 请求
POST 请求可以用来提交表单数据,下面的例子展示了如何使用requests 发送带表单数据的POST 请求
[root@localhost ~]# python3
Python 3.11.6 (main, Dec 18 2024, 22:06:12) [GCC 12.3.1 (openEuler 12.3.1-62.oe2403sp1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>>
代码解释:
语句 | 含义 |
---|---|
data | 是一个字典,包含表单提交的数据,,requests 会自动将数据编码头application/x-www-fomm-urlencoded格式 |
三. 处理 JSON 响应
许多 Web AP|返回的数据格式是JSON,Python的 requests 库提供了方便的JSON 处理方法
[root@localhost ~]# python3
Python 3.11.6 (main, Dec 18 2024, 22:06:12) [GCC 12.3.1 (openEuler 12.3.1-62.oe2403sp1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>>
代码解释:
语句 | 含义 |
---|---|
response.json() | 将响应的内容解析为 Python 字典,方便我们处理JSON 数据 |
四. 文件操作
文件操作是 Python编程中常见的任务。Python提供了多种方法来读取、写入和管理文件,能够处理文本文件、二进制文件以及目录操作等。掌握文件操作的基础和技巧是高效编程的关键
1. 打开文件的模式
Python使用内置的 open()函数来打开文件。打开文件时,我们需要指定文件模式(即操作文件的方式)
常见的文件模式如下:
(1)常见的文件打开模式
模式 | 含义 |
---|---|
r | 只读模式(默认模式)。文件必须存在。如果文件不存在,会抛出 FileNotFoundError 异常 |
w | 写入模式。如果文件存在,会覆盖文件内容。如果文件不存在,会创建新文件 |
a | 追加模式。如果文件存在,写入的数据会追加到文件末尾;如果文件不存在,会创建新文件 |
x | 独占创建模式。若文件已存在,操作会失败并抛出 FileExistsError 异常。此模式通常用于创建文件时防止覆盖现有文件 |
rb | 二进制读取模式,用于读取非文本文件(如图片、音频文件) |
wb | 二进制写入模式,用于写入非文本文件 |
r+ | 读写模式。文件必须存在。既可以读取文件内容,也可以写入数据 |
w+ | 读写模式。如果文件存在,会覆盖文件内容;如果文件不存在,会创建新文件 |
a+ | 读写模式。文件存在时,数据会追加到文件末尾;如果文件不存在,会创建新文件 |
rb+ | 二进制读写模式 |
(2)示例:打开文件并使用模式
测试文件
[root@localhost ~]# vim aaa.txt
aaa
bbb
ccc
测试:
2. 读取文件
Python中的文件读取功能非常强大
以下是几种常见的读取方式:
(1)read()方法
read()方法用于读取文件中的所有内容。读取后的内容会作为字符串返回
(2)readline()方法
readline()方法每次读取一行文件内容,适用于需要逐行处理文件的情况
(3)readlines()方法
readlines()方法会一次性读取文件中的所有行,并将每行数据存储为一个列表的元素,适用于需要读取整个文件并进行行处理的情况
3. 写入文件
Python提供了几种方法将数据写入文件。写入操作常用于日志记录、数据导出等场景
(1)使用 write()方法写入文件
write()方法将指定的字符串写入文件。若文件以w模式打开,原文件内容会被覆盖;若以a模式打开,内容会被追加到文件末尾
测试:
(2)使用 writelines()方法写入多行数据
writelines()方法接受一个可选代对象(如列表、元组等),将其元素写入文件中,每个元素将作为-行写入文件
测试:
4. 下载文件示例
我们可以通过 requests 库来下载文件,并将其保存到本地。例如,下载一个图片文件:
5. 文件操作中的注意事项
在进行文件操作时,需要注意以下几个问题:
注意事项 | 含义 |
---|---|
文件是否存在 | 在打开文件时,必须确保文件路径正确。如果文件不存在,可以使用 os.path.exists()检查文件是否存在,或者使用try-except捕获FileNotFoundError异常 |
文件权限 | 在操作文件时,可能会遇到权限不足的问题。例如,尝试写入只读文件,或访问没有读取权限的文件。在这种情况下,可以使用try-except来捕获PermissionError 异常 |
文件自动关闭 | 使用withopen()语句时,Python会自动管理文件的打开和关闭,无需显式调用file.close()。这有助于避免文件未关闭的问题,减少资源泄漏的风险 |
6. 其他常见文件操作
(1)获取文件信息
Python提供了 os和 os.path 模块,可以获取文件的大小、修改时间等信息
(2)删除文件
使用os.remove()可以删除文件
测试:
五. 错误处理与异常捕获
在进行Web 请求时,可能会发生各种错误,例如网络超时、服务器错误等。requests 库通过异常处理机制帮助我们捕获这些错误.Python 的 try语句能够捕获和处理代码块中的异常,从而避免程序崩溃,并且提供了处理错误的机会。
1. try 语句的使用
try语句用于捕获和处理异常,它由三部分组成:
语句 | 含义 |
---|---|
try块 | 包含可能会引发异常的代码。当代码运行过程中发生错误时,程序会跳到相应的except块进行处理 |
except块 | 当 try块中的代码出现异常时,程序会跳转到except块执行。在 except 中可以指定要捕获的异常类型,如Timeout、HTTPError等 |
else块(可选) | 如果try块中的代码没有抛出异常,则会执行 else 块中的代码 |
finally块(可选) | 无论是否发生异常,finally 块中的代码都会执行,通常用于清理资源(如关闭文件、数据库连接等) |
2. 示例:捕获常见异常
代码解释:
try块:
字段 | 含义 |
---|---|
try块 | 首先发起HTTP请求,设置超时时间为5秒,并使用response.raise for status()来检查响应的状态码。如果服务器返回了错误的状态码(如 404、500),raise for status()会抛出HTTPError 异常 |
except 块:
字段 | 含义 |
---|---|
Timeout | 如果请求超时(超过设置的5秒),程序会捕获到Timeout异常,并打印“Requesttimed out" |
HTTPError | 如果响应的状态码表明出现 HTTP 错误(例如 404表示未找到页面),程序会捕获到 HTTPError 异常,并打印相关错误信息 |
RequestException | 捕获其他类型的网络相关错误(如连接问题、DNS 解析失败等)RequestException是所有 requests 库异常的基类,可以捕获任何requests 库抛出的异常 |
finally 块:
字段 | 含义 |
---|---|
finally 块 | finally 中的代码无论是否发生异常都会被执行。通常用于释放资源或做一些收尾工作。这里我们仅打印“Request attempt completed.”表示请求的结束 |
异常处理总结:
异常处理让我们在程序运行中捕获到错误并做出相应处理,避免程序崩溃通过 try..except结构,可以精确捕获并处理不同类型的异常finally 块用于清理工作,在请求处理完成后可以释放资源(如关闭文件、数据库连接等)