Python 实现 web 请求与响应

一:什么是 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 之前,我们需要先安装它。如果你没有安装,可以通过以下命令安装:

2:发送 GET 请求

GET 请求通常用于获取数据。我们通过requests.get()来发送 GET请求,并可以处理返回的响应

代码解释:

requests.get()用于发送 GET 请求,获取指定 URL的数据。

response.status_code 获取 HTTP 响应状态码。

response.text 获取响应的正文内容(通常是 HTML或 JSON数据)

response.headers 获取响应头

len(response.text)返回响应正文的长度,帮助我们了解返回内容的大小

3:发送 POST 请求

POST请求用于将数据提交到服务器,通常用于表单提交或上传文件。我们使用requests.post0来发送 POST 请求。

发送 POST 请求

输出响应状态码

输出响应内容(JSON格式)

复制代码
print('Response Body:",response.json())

代码解释:

requests.post()用于发送 POST请求,将数据提交到服务器。

data参数是一个字典,包含了我们要提交的数据。requests 会自动将其编码为

application/x-www-fomm-urlencoded 格式.

response.json()用于解析返回的 JSON 数据,

4:处理响应头和状态码

响应头提供了关于服务器的信息,状态码则告诉我们请求是否成功。我们可以通response.headers获取响应头,通过 response.status code 获取状态码

发送 GET请求

复制代码
response=requests.get('https://www.example.com')

获取响应头

复制代码
print('Response Headers:',response.headers)

获取响应状态码

复制代码
print('status Code:',response.status_code)

获取内容类型

复制代码
print('Content-Type:',response.headers.get('Content-Type ))

代码解释:

response.headers 返回响应头,包含如 Content-Type、Date、Server 等信息。

response.status_code 返回 HTTP 状态码,

response.headers.get('Content-Type')获取响应的内容类型(如 text/html, application/json)。

5:发送带查询参数的 GET 请求

在 GET 请求中,我们可以通过 URL传递查询参数。例如,访问一个包含参数的 URL。

发送带查询参数的 GET请求

复制代码
url='https://httpbin.org/get'
params ={'name':'Alice','age': 25}
response=requests.get(url,params=params)

输出响应内容

复制代码
print('Response Body:',response.json())

代码解释:

params是一个字典,包含要传递的查询参数。requests.get()会自动将这些参数编码到 URL 中。

6:发送带表单数据的 POST请求

POST请求可以用来提交表单数据,下面的例子展示了如何使用 requests 发送带表单数据的

POST 请求。

发送带表单数据的 POST 请求

复制代码
url ='https://httpbin.org/post'
data={'username':'testuser','password':'mypassword'}
response=requests.post(url,data=data)

输出响应的内容

复制代码
print('Response Body:',response.json())

代码解释:

data参数是一个字典,包含表单提交的数据,requests 会自动将数据编码为

application/x-www-fomm-urlencoded格式

三:处理JSON 响应

许多 Web AP| 返回的数据格式是JSON, Python 的 requests 库提供了方便的 JSON 处理方法。

发送 GET请求并获取 JSON 响应

复制代码
url='https://api.github.com/users/octocat'
response = requests.get(url)

解析 JSON 数据

复制代码
data = response.json()

输出用户的 GitHub信息

复制代码
print('user Login:', data['login'])
print('User Name:', data['name'])

代码解释:

response.json(将响应的内容解析为 Python 字典,方便我们处理 JSON 数据

四:文件操作

文件操作是 Python编程中常见的任务。Python提供了多种方法来读取、写入和管理文件,能够处理文本文件、二进制文件以及目录操作等。掌握文件操作的基础和技巧是高效编程的关键。

1:打开文件的模式

Python使用内置的 open()函数来打开文件。打开文件时,我们需要指定文件模式(即操作文件的方式)。常见的文件模式如下:

(1)常见的文件打开模式

r:只读模式(默认模式)。文件必须存在。如果文件不存在,会抛出FileNotFoundError 异常.

w:写入模式。如果文件存在,会覆盖文件内容。如果文件不存在,会创建新文件。

a:追加模式。如果文件存在,写入的数据会追加到文件末尾;如果文件不存在,会创建新文件。

x:独占创建模式。若文件已存在,操作会失败并抛出 FileExistsError 异常。此模式通常用于创建文件时防止覆盖现有文件。

rb:二进制读取模式,用于读取非文本文件(如图片、音频文件)。

wb:二进制写入模式,用于写入非文本文件。

r+:读写模式。文件必须存在。既可以读取文件内容,也可以写入数据。

w+:读写模式。如果文件存在,会覆盖文件内容;如果文件不存在,会创建新文件

a+:读写模式。文件存在时,数据会追加到文件未尾;如果文件不存在,会创建新文件。

rb+:二进制读写模式。

(2)示例:打开文件并使用模式

以写入模式打开文件,文件内容会被覆盖

以追加模式打开文件,新的内容会追加到文件末尾

以二进制模式打开文件

2:读取文件

Python中的文件读取功能非常强大。以下是几种常见的读取方式

(1)read()方法

read()方法用于读取文件中的所有内容。读取后的内容会作为字符串返回

(2)readine()方法

read1ine()方法每次读取一行文件内容,适用于需要逐行处理文件的情况

(3)readlines()方法

readlines()方法会一次性读取文件中的所有行,并将每行数据存储为一个列表的元素,适用于需要读取整个文件并进行行处理的情况。

3:写入文件Python提供了几种方法将数据写入文件。写入操作常用于日志记录、数据导出等场景。(1)使用 write()方法写入文件

write()方法将指定的字符串写入文件。若文件以w模式打开,原文件内容会被覆盖;若以a模式打开内容会被追加到文件末尾。

(2)使用 writelines()方法写入多行数据writelines()方法接受一个可选代对象(如列表、元组等),将其元素写入文件中,每个元素将作为一行写入文件。

复制代码
lines =["第一行数据。\n","第二行数据。\n","第三行数据。\n"]
with open('output.txt', 'w')as file:
file.writelines(lines)

4:下载文件示例

复制代码
url='https://www.example.com/image.jpg'
response=requests.get(url)

检查请求是否成功

复制代码
if response.status code == 200:

使用二进制模式写入文件

复制代码
with open('downloaded image.jpg', 'wb')as file:
file.write(response.content)
print("图片下载成功!")
else:
print(f"下载失败,状态码:{response.status_code}")

5:文件操作中的注意事项

在进行文件操作时,需要注意以下几个问题:文件是否存在:在打开文件时,必须确保文件路径正确。如果文件不存在,可以使用 os.path.exists()检查文件是否存在,或者使用try-except捕获FileNotFoundError异常。

复制代码
import os
if os.path.exists('example.txt'):
    with open('example.txt',,'r')as file:
        content = file.read()
else:
    print("文件不存在!")

文件权限:在操作文件时,可能会遇到权限不足的问题。例如,尝试写入只读文件,或访问没有读取权限的文件。在这种情况下,可以使用try-except来捕获 PermissionError 异常。

复制代码
try:
    with open("readonly file.txt','w') as file:
    file.write("尝试写入只读文件")
except PermissionError:
    print("权限不足,无法写入文件。")

6:其他常用文件操作

(1)获取文件信息

Python提供了 os和os.path 模块,可以获取文件的大小、修改时间等信息,

复制代码
file path+'example.txt
print("文件大小:",os.path.getsize(file_path),"字节")
print("文件修改时间:",os.path.getmtime(file_path))

(2)删除文件

使用os.remove()可以删除文件:

复制代码
file _path='example.txt
if os.path.exists(file path):
    os.remove(file_path)
    print(f"{file_path} 已删除!")
else:
    print("文件不存在!")
相关推荐
小小小小宇42 分钟前
前端 Service Worker
前端
只喜欢赚钱的棉花没有糖1 小时前
http的缓存问题
前端·javascript·http
小小小小宇2 小时前
请求竞态问题统一封装
前端
loriloy2 小时前
前端资源帖
前端
源码超级联盟2 小时前
display的block和inline-block有什么区别
前端
GISer_Jing2 小时前
前端构建工具(Webpack\Vite\esbuild\Rspack)拆包能力深度解析
前端·webpack·node.js
让梦想疯狂2 小时前
开源、免费、美观的 Vue 后台管理系统模板
前端·javascript·vue.js
海云前端2 小时前
前端写简历有个很大的误区,就是夸张自己做过的东西。
前端
葡萄糖o_o2 小时前
ResizeObserver的错误
前端·javascript·html
AntBlack2 小时前
Python : AI 太牛了 ,撸了两个 Markdown 阅读器 ,谈谈使用感受
前端·人工智能·后端