当前位置: 首页 > news >正文

Python 实现Web 请求与响应

目录

一:什么是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 请求与响应?

1.web请求

定义:客户端(如浏览器)向服务器发送的获取资源或执行操作的请求。
组成部分

  • 请求行:包含请求方法(如 GET、POST)、URL、协议版本(如 HTTP/1.1)。
  • 请求头:包含客户端信息(如 User-Agent)、请求参数(如 Content-Type)等。
  • 请求体(可选):发送的数据(如表单数据、JSON),常见于 POST 请求。

2.web响应

定义:服务器接收到请求后返回给客户端的结果。
组成部分

  • 状态行:包含协议版本、状态码(如 200 OK)、状态描述。
  • 响应头:包含服务器信息(如 Server)、数据类型(如 Content-Type)等。
  • 响应体:返回的实际数据(如 HTML、JSON、文件内容)。

3.HTTP协议概述

超文本传输协议(HTTP) 是 Web 请求与响应的通信基础,基于 客户端 - 服务器模型,具有以下特点:

  • 无状态:每次请求独立,服务器不保留客户端历史信息。
  • 方法多样:常用方法包括 GET(获取资源)、POST(提交数据)、PUT(更新资源)、DELETE(删除资源)等。
  • 版本迭代:常见版本有 HTTP/1.1(主流)、HTTP/2(性能优化)、HTTP/3(基于 UDP 的 QUIC 协议)。

4.常见的HTTP状态码包括:

状态码分类说明
200成功请求成功处理(如页面正常返回)。
201成功请求创建新资源成功(如用户注册)。
301重定向资源永久移动,自动跳转至新 URL。
400客户端错误请求语法错误(如参数缺失)。
401客户端错误未授权(需提供认证信息)。
403客户端错误禁止访问(权限不足)。
404客户端错误资源未找到(URL 错误)。
500服务器错误服务器内部错误(如代码崩溃)。

二:python的requests库

1.安装requests库

pip install requests

2.发送GET请求

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

import requests# 发送 GET 请求
response = requests.get('https://www.example.com')# 输出响应的状态码
print('Status Code:', response.status_code)# 输出响应的内容
print('Response Body:', response.text)# 输出响应头
print('Response Headers:', response.headers)# 获取响应内容的长度
print('Content Length:', len(response.text))

代码解释:

  • requests.get () 用于发送 GET 请求,获取指定 URL 的数据。
  • response.status_code 获取 HTTP 响应状态码。
  • response.text 获取响应的正文内容(通常是 HTML 或 JSON 数据)。
  • response.headers 获取响应头。
  • len (response.text) 返回响应正文的长度,帮助我们了解返回内容的大小 。

3.发送POST请求

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

import requests# 发送 POST 请求
url = 'https://httpbin.org/post'
data = {'name': 'Alice', 'age': 25}
response = requests.post(url, data=data)# 输出响应状态码
print('Status Code:', response.status_code)# 输出响应内容(JSON 格式)
print('Response Body:', response.json())

代码解释:

  • requests.post () 用于发送 POST 请求,将数据提交到服务器。
  • data 参数是一个字典,包含了我们要提交的数据。requests 会自动将其编码为 application/x-www-form-urlencoded 格式。
  • response.json () 用于解析返回的 JSON 数据。

4.处理响应头和状态码

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

import requests
# 发送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。

import requests# 发送带查询参数的 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 请求。

import requests# 发送带表单数据的 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-form-urlencoded 格式。

三:处理JSON响应

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

import requests# 发送 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)示例:打开文件并使用模式

# 以只读模式打开文件
with open('example.txt', 'r') as file:content = file.read()print(content)# 以写入模式打开文件,文件内容会被覆盖
with open('example.txt', 'w') as file:file.write('这是新的文件内容。\n')# 以追加模式打开文件,新的内容会追加到文件末尾
with open('example.txt', 'a') as file:file.write('追加的内容。\n')# 以二进制模式打开文件(例如读取图片)
with open('image.jpg', 'rb') as file:binary_data = file.read()print('读取到的二进制数据:', binary_data[:20])

2.读取文件

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

(1)read()方法

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

with open('example.txt', 'r') as file:content = file.read()print(content)

(2)readline()方法

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

with open('example.txt', 'r') as file:line = file.readline()while line:print(line.strip())  # strip()用来去除行末的换行符line = file.readline()

(3)readlines()方法

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

with open('example.txt', 'r') as file:lines = file.readlines()for line in lines:print(line.strip())

3.写入文件

(1)使用write()方法写入文件

Python 中使用open()函数打开文件时,若指定模式为'w'(写入模式)、'w+'(读写模式,文件不存在则创建)或'a'(追加模式) 、'a+'(追加读写模式)等可写模式,就可以通过文件对象的write()方法写入内容。write()方法接受一个字符串参数,将其写入文件。
示例代码:

with open('output.txt', 'w') as file:file.write("这是通过 write 方法写入的一行文字。\n")

(2)writelines()方法写入多行数据

writelines()方法用于将一个字符串序列(如列表,其中每个元素为一行字符串)写入文件。它不会自动添加换行符,需要在字符串中自行包含。
示例代码:

lines = ["第一行内容\n", "第二行内容\n", "第三行内容\n"]
with open('output.txt', 'a') as file:file.writelines(lines)

4.下载文件示例

使用 Python 的requests库可以实现文件下载。以下是从指定 URL 下载文件并保存到本地的示例:

import requestsurl = "https://example.com/some_file.jpg"  # 替换为实际文件 URL
local_filename = 'downloaded_file.jpg'
response = requests.get(url, stream=True)
with open(local_filename, 'wb') as file:for chunk in response.iter_content(chunk_size=8192):if chunk:file.write(chunk)

上述代码中,stream=True使请求以流的形式获取数据,iter_content()按指定块大小迭代读取响应内容,然后逐块写入本地文件。

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

  • 文件打开模式选择:根据需求正确选择文件打开模式,如读取用'r',写入用'w''a'等,避免因模式错误导致数据丢失或操作失败。
  • 文件关闭:使用完文件后要确保关闭,with语句是一种安全简便的方式,可自动管理文件关闭,防止资源泄漏。若不使用with,记得手动调用file.close() 。
  • 权限问题:确保程序运行有足够权限对文件进行相应操作,如写入、删除等,否则会引发权限错误。

6.其他常用文件操作

(1)获取文件信息

可以使用os模块获取文件相关信息,例如文件大小、修改时间等。示例代码:

import osfile_path = 'example.txt'
file_size = os.path.getsize(file_path)  # 获取文件大小(字节数)
modified_time = os.path.getmtime(file_path)  # 获取文件最后修改时间(时间戳)
print(f"文件大小: {file_size} 字节,最后修改时间: {modified_time}")

(2)删除文件

使用os模块的remove()函数可以删除文件。示例代码:

import osfile_path = 'to_be_deleted.txt'
if os.path.exists(file_path):os.remove(file_path)print(f"{file_path} 已成功删除。")
else:print(f"{file_path} 不存在。")

五:错误处理与异常捕获

1.try语句的使用

try 语句用于捕获和处理异常,它由三部分组成:

  • try 块:包含可能会引发异常的代码。当代码运行过程中发生错误时,程序会跳到相应的 except 块进行处理。
  • except 块:当 try 块中的代码出现异常时,程序会就转到 except 块执行。在 except 中可以指定要捕获的异常类型,如 Timeout、HTTPError 等。
  • else 块(可选):如果 try 块中的代码没有抛出异常,则会执行 else 块中的代码。
  • finally 块(可选):无论是否发生异常,finally 块中的代码都会执行,通常用于清理资源(如关闭文件、数据库连接等)。

2.示例:捕获常见异常

下示例展示捕获文件打开失败(FileNotFoundError)和类型错误(TypeError) :

try:with open('nonexistent_file.txt', 'r') as file:  # 尝试打开不存在的文件content = file.read()data = "string" + 1  # 会引发类型错误的操作
except FileNotFoundError as e:print(f"文件未找到异常: {e}")
except TypeError as e:print(f"类型错误异常: {e}")

相关文章:

  • SpringBoot开发——Spring Boot异常处理全攻略:五大方案实战对比
  • Redis 5.0.10 集群部署实战(3 主 3 从,三台服务器)
  • 2025年系统架构师---综合知识卷
  • webpack构建速度和打包体积优化方案
  • Qt无边框界面添加鼠标事件
  • 【推理加速】TensorRT C++ 部署YOLO11全系模型
  • 车载网关设计原则 ---- 透明性与诊断可追溯性
  • 分贝计如何帮助改善睡眠环境
  • 常见排序算法详解及其复杂度分析
  • Linux 线程(中)
  • OptiStruct结构分析与工程应用:结构激励
  • (Java基础笔记vlog)Java中常见的几种设计模式详解
  • Axure系统原型设计列表版方案
  • 构建基于全面业务数据的大数据与大模型企业护城河战略
  • 安装部署配置jenkins
  • 48页 @《人工智能生命体 新启点》中國龍 原创连载
  • HJ101 输入整型数组和排序标识【牛客网】
  • JAVA8怎么使用9的List.of
  • 芯片数据手册下载网站整理
  • Go File多终端数据同步技术全解:跨设备数据管理实战指南与复杂场景处理过程
  • 用asp做的网站打开页面很慢/免费创建属于自己的网站
  • 公司网站制作平台/友情链接模板
  • 景区网站建设原则/百度号码认证申诉平台
  • 做网站几个步骤/百度推广服务费一年多少钱
  • 咋做个人网站/中国职业培训在线平台
  • 企业网站做多大/东营网站建设费用