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:文件操作中的注意事项

(1)文件是否存在

(2)文件权限

(3)文件自动关闭

6:其他常用文件操作

(1)获取文件信息

(2)删除文件

五:错误处理与异常捕获

1:try语句的使用

2:示例:捕获常见异常


一:什么是Web请求与响应?

1:Web请求

当客户端(如浏览器)向服务器请求资源时,触发Web请求,其结构包括:

  • 请求行:包括请求方法定义操作类型(如GET(获取资源)、POST(提交数据)、PUT(更新资源)、DELETE(删除资源))。

  • URL:目标资源的地址(如https://example.com/page)。

  • 请求头(Headers):附加信息(如User-Agent(客户端类型)、Accept-Language(语言偏好)、Content-Type(数据类型))。

  • 请求体(Body):可选,用于提交数据(如表单输入、JSON)。

2:Web响应

服务器处理请求后返回Web响应,包含:

  • 状态码:表示请求结果(如200 OK)。

  • 响应头(Headers):元数据(如Content-Type(响应数据类型)、Content-Length(数据大小)、Cache-Control(缓存策略))。

  • 响应体(Body):返回的数据(如HTML页面、图片、JSON)。

3:HTTP协议概述

  • 定义:基于TCP/IP的应用层协议,用于客户端与服务器通信。

常见HTTP方法

  • GET:请求服务器获取资源,通常用于读取数据。
  • POST:提交数据到服务器,通常用于表单提交,文件上传等。
  • PUT:更新服务器上的资源。
  • DELETE:删除服务器上的资源。

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

分类状态码说明
1xx(信息)100 Continue服务器已接收请求头,客户端应继续发送请求体。
2xx(成功)200 OK请求成功。
201 Created资源已创建(如POST提交成功)。
204 No Content成功但无返回内容(如DELETE请求)。
3xx(重定向)301 Moved Permanently资源永久重定向到新URL。
302 Found资源临时重定向。
304 Not Modified客户端缓存有效,无需重新传输。
4xx(客户端错误)400 Bad Request请求语法错误(如参数错误)。
401 Unauthorized需身份验证(如未登录)。
403 Forbidden无权限访问资源(如已登录但权限不足)。
404 Not Found资源不存在。
5xx(服务器错误)500 Internal Server Error服务器内部错误(如代码异常)。
502 Bad Gateway网关/代理服务器无法获取上游响应。
503 Service Unavailable服务器过载或维护。
504 Gateway Timeout网关等待上游响应超时。

二:python的requests库

1:安装requests库

Linux自带python:

pip3 config set global.index-url http://mirrors.aliyun.com/pypi/simple
#信任更新源
pip3 config set install.trusted-host mirrors.aliyun.com
pip3 install --upgrade pip           #设置更新源
history#安装requests库
pip3 install requests

2:发送GET请求

创建python文件,用于发送get请求

vim aaa.py
import requests		#导入模块response=requests.get('https://httpbin.org/get')		#发送get请求print('状态码:',response.status_code)		#输出响应的状态码
print('响应内容:',response.text)		#输出响应的内容
print('响应头:',response.headers)		#输出响应头
print('头部长度:',len(response.text))		#获取响应内容的长度
#运行aaa.py
python3 aaa.py

代码解释:

response = requests.get()        #发送一个 HTTP GET 请求。

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

response.text        #以 字符串形式 返回响应内容

response.headers    #获取 HTTP 响应的 头部信息,返回一个字典状对象。

len(response.text)        #计算响应内容的 字符长度。

3:发送POST请求

提交表单,用POST的方式
创建python文件,用于发送POST请求

vim bbb.py
import requests		#导入模块#发送POST请求
url='https://httpbin.org/post'
data={'name':'zhangsan','age':20}
response=requests.post(url,data=data)print('状态码:',response.status_code)		#输出响应的状态码
print('响应内容:',response.json())		#输出响应的内容(json格式)
#运行aaa.py
python3 bbb.py

代码解释:

response = requests.post()        #发送一个 HTTP POST 请求。

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

response.json()               #输出响应的内容(json格式)

4:处理响应头和状态码

# 获取状态码(200表示成功,404未找到等)
print("状态码:", response.status_code)# 获取所有响应头(字典格式)
headers = response.headers
print("Content-Type:", headers.get('Content-Type'))# 检查请求是否成功
if response.status_code == 200:print("请求成功!")

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

使用params参数自动构建URL:

form_data = {'username': 'user', 'password': 'pass'}
response = requests.post('https://www.example.com/login', data=form_data)

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

使用data参数提交表单数据:

form_data = {'username': 'user', 'password': 'pass'}
response = requests.post('https://www.example.com/login', data=form_data)

发送JSON数据(对比)

使用json参数自动设置请求头:

json_data = {'key': 'value'}
response = requests.post('https://api.example.com/post', json=json_data)
# Content-Type自动设为application/json

三:处理JSON响应

使用response.json()方法直接将响应内容解析为Python字典或列表:

import requestsresponse = requests.get('https://api.example.com/data')
data = response.json()  # 自动解析JSON数据print(data)          # 输出完整JSON内容
print(data['key'])   # 访问具体字段(假设是字典结构)

四:文件操作

1:打开文件的模式

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

'r':只读模式(默认),文件必须存在。

'w':写入模式,若文件存在则清空内容,不存在则创建。

'a':追加模式,若文件存在则在末尾追加,不存在则创建。

'x':独占创建模式,文件必须不存在,否则报错。

'b':二进制模式(如 'rb' 或 'wb')。

't':文本模式(默认,如 'rt' 或 'wt')。

'+':读写模式(如 'r+' 或 'w+')。

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

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

2:读取文件

(1)read()方法

读取整个文件内容,返回字符串。

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

(2)readline()方法

逐行读取文件,每次返回一行字符串。

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

(3)readlines()方法

读取所有行,返回包含各行内容的列表。

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

3:写入文件

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

with open('example.txt', 'w') as file:file.write("Line 1\n")file.write("Line 2\n")

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

参数为字符串列表,需自行添加换行符。

lines = ["Line 1\n", "Line 2\n", "Line 3\n"]
with open('example.txt', 'w') as file:file.writelines(lines)

4:下载文件示例

使用 requests 库下载文件:

import requestsurl = "https://example.com/file.txt"
response = requests.get(url)with open("downloaded_file.txt", 'wb') as file:file.write(response.content)

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

(1)文件是否存在

在打开文件之前,最好先检查文件是否存在,以避免 FileNotFoundError。可以使用 os.path.exists() 或 Path.exists()(Python 3.4+ 的 pathlib 模块)进行检查。

import osfile_path = "example.txt"if os.path.exists(file_path):with open(file_path, "r") as file:content = file.read()print(content)
else:print(f"文件 {file_path} 不存在!")

(2)文件权限

文件存在,也可能因权限问题(如只读文件尝试写入)导致操作失败。

import osfile_path = "example.txt"if os.path.exists(file_path):if os.access(file_path, os.R_OK):with open(file_path, "r") as file:content = file.read()print(content)else:print(f"没有读取 {file_path} 的权限!")
else:print(f"文件 {file_path} 不存在!")

(3)文件自动关闭

使用 with 语句(上下文管理器)可以确保文件在使用后自动关闭,即使发生异常。避免直接使用 open() 而不关闭文件,否则可能导致资源泄漏。

#正确做法(推荐):
with open("example.txt", "r") as file:content = file.read()print(content)
# 文件会自动关闭,无需手动调用 file.close()#错误做法(不推荐):
file = open("example.txt", "r")
content = file.read()
print(content)
file.close()  # 如果前面代码出错,可能不会执行 close()

6:其他常用文件操作

(1)获取文件信息

使用 os 模块:

import os# 获取文件大小
size = os.path.getsize('example.txt')# 获取文件修改时间
mtime = os.path.getmtime('example.txt')# 检查是否为文件
is_file = os.path.isfile('example.txt')

(2)删除文件

import osos.remove('example.txt')  # 删除文件
os.rmdir('empty_dir')     # 删除空目录
shutil.rmtree('dir')      # 递归删除目录(需导入 shutil)

五:错误处理与异常捕获

1:try语句的使用

try 语句用于捕获和处理代码块中可能发生的异常。基本语法如下:

try:# 可能引发异常的代码
except ExceptionType:# 处理异常的代码
else:# 如果没有异常发生,执行的代码(可选)
finally:# 无论是否发生异常,都会执行的代码(可选)

try:包裹可能引发异常的代码。

except:捕获特定类型的异常并处理。

else:当没有异常发生时执行的代码(可选)。

finally:无论是否发生异常都会执行的代码(常用于资源清理,如关闭文件)。

2:示例:捕获常见异常

以下是几种常见异常的捕获示例:

(1)捕获 ZeroDivisionError(除零错误)

try:result = 10 / 0
except ZeroDivisionError:print("错误:除数不能为零!")
输出:
错误:除数不能为零!

(2)捕获 ValueError(值错误,如输入非数字)

try:num = int("abc")
except ValueError:print("错误:输入的不是有效数字!")
输出:
错误:输入的不是有效数字!

(3)捕获 IndexError(索引越界)

try:lst = [1, 2, 3]print(lst[3])
except IndexError:print("错误:索引超出范围!")
输出:
错误:索引超出范围!

(4)捕获 KeyError(字典键不存在)

try:d = {"name": "Alice"}print(d["age"])
except KeyError:print("错误:键不存在!")
输出:
错误:键不存在!

(5)捕获多个异常

try:num = int(input("请输入一个数字:"))result = 10 / num
except ValueError:print("错误:输入的不是有效数字!")
except ZeroDivisionError:print("错误:除数不能为零!")
else:print(f"结果是:{result}")
finally:print("程序执行完毕。")
输入5: 结果是:2.0程序执行完毕。
输入 0:错误:除数不能为零!程序执行完毕。
输入 abc: 错误:输入的不是有效数字!程序执行完毕。

(6)捕获所有异常(不推荐,但可用于日志记录)

try:# 可能出错的代码risky_operation()
except Exception as e:print(f"发生未知错误:{e}")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/81993.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/81993.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity使用sherpa-onnx实现说话人识别

网友软绵绵的面包人推荐,模型3dspeaker_speech_eres2net_base_200k_sv_zh-cn_16k-common.onnx的效果比3dspeaker_speech_eres2net_base_sv_zh-cn_3dspeaker_16k.onnx要好 具体代码 using System; using System.Collections.Generic; using System.IO; using Sherpa…

ElasticSearch-集群

本篇文章依据ElasticSearch权威指南进行实操和记录 1,空集群 即不包含任何节点的集群 集群大多数分为两类,主节点和数据节点 主节点 职责:主节点负责管理集群的状态,例如分配分片、添加和删除节点、监控节点故障等。它们不直接…

LG P9844 [ICPC 2021 Nanjing R] Paimon Segment Tree Solution

Description 给定序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1​,a2​,⋯,an​),有 m m m 次修改 ( l , r , v ) (l,r,v) (l,r,v): 对每个 i ∈ [ l , r ] i\in[l,r] i∈[l,r],令 a i ← a i v a_i\gets a_iv ai​←…

Google Prompt Tuning:文本嵌入优化揭秘

Google Research Prompt Tunin :from_embedded_string 在 Google Research 的 Prompt Tuning 项目代码库 中,from_embedded_string 函数主要用于基于字符串文本初始化提示词的嵌入向量,其调用场景通常与提示词优化或任务适配相关。 1. 核心代码位置 from_embedded_string …

网页 H5 微应用接入钉钉自动登录

ℹ️关于云审批 云审批(cloud approve) ,一款专为小微企业打造,支持多租户的在线审批神器。它简化了申请和审批流程,让您随时随地通过手机或电脑完成请款操作。员工一键提交申请,审批者即时响应&#xff0c…

idea无法识别Maven项目

把.mvn相关都删除了 导致Idea无法识别maven项目 或者 添加导入各个模块 最后把父模块也要导入

飞桨paddle import fluid报错【已解决】

跟着飞桨的安装指南安装了paddle之后 pip install paddlepaddle有一个验证: import paddle.fluid as fluid fluid.install check.run check()报错情况如下,但是我在pip list中,确实看到了paddle安装上了 我import paddle别的包&#xff0c…

现代化SQLite的构建之旅——解析开源项目Limbo

现代化SQLite的构建之旅——解析开源项目Limbo 在当今飞速发展的技术世界中,轻量级且功能强大的数据库已成为开发者的得力助手。当我们谈论轻量级数据库时,SQLite无疑是一个举足轻重的名字。然而,随着技术的进步,我们对数据库的需求也变得更加多样化。这正是Limbo项目诞生…

MinIO:从入门到精通,解锁云原生存储的奥秘

一、引言:为什么 MinIO 正在重塑存储世界? 在云计算和大数据时代,传统存储系统面临扩展性差、成本高、兼容性不足等挑战。MinIO 凭借其 S3 兼容性、分布式架构、高性能存储 等特性,成为企业构建现代化存储基础设施的首选。 本文…

vscode怎么关闭自动定位文件

关闭自动定位文件功能 方式1 在设置中搜索: explorer.autoReveal 方式2 直接在settings.json中增加"explorer.autoReveal": false 添加类似jetbrains IDE的文件定位功能 可以直接安装插件市场搜索niushuaibing.vs-location, 安装后会有文件定位按钮, 点击后即可…

学习路之uniapp--unipush2.0推送功能--给自己发通知

学习路之uniapp--unipush2.0推送功能--给自己发通知 一、绑定云空间及创建云函数二、编写发送界面三、效果后期展望: 一、绑定云空间及创建云函数 package.json {"name": "server-push","dependencies": {},"main": "…

什么是VR展示?VR展示的用途

随着科技的迅猛发展,我们步入一个全新的数字时代。在这个时代,虚拟现实(VR)技术崭露头角,逐步改变我们对世界的认知。全景展示厅作为VR技术与传统展览艺术的完美结合,以独特的全景视角,引领我们…

抖音IP属地跟无线网有关吗?如何更改

IP属地显示功能让许多用户感到好奇——为什么自己的位置信息有时准确,有时却显示在其他城市?这时,用户会疑惑:抖音IP属地跟无线网有关系吗?抖音的IP属地显示与其所使用的网络类型(包括无线网)密…

JESD204 ip核使用与例程分析(二)

JESD204 ip核使用与例程分析(二) JESD204时钟方案专用差分时钟对例程分析jesd204_0_transport_layer_demapperjesd204_0_sig_chkjesd204_0_clockingjesd204_0 ip核port寄存器AXI-LITE寄存器配置jesd204_phy ip核JESD204时钟方案 图3-1所示为最通用、灵活的时钟解决方案。在图…

微软全新开源的Agentic Web网络项目:NLWeb,到底是什么 ?

目录 1、背景 2、NLWeb是什么? 3、NLWeb是如何工作的? 3.1 技术原理 3.2 对发布者的价值 3.3 核心团队与合作伙伴 4、快速入门指南 5、延伸阅读 Agentic:Agent的形容词,Agentic指系统由大型语言模型(LLM&#…

前端性能优化的秘密武器:Preload 与 Prefetch 的深度解析

前端性能优化的秘密武器:Preload 与 Prefetch 的深度解析 在前端开发中,页面加载速度直接影响用户体验和业务转化率。而“资源预加载”技术,正是优化加载性能的核心手段之一。本文将深入浅出地讲解 Preload 与 Prefetch 这两项技术&#xff…

App Builder技术选型指南:从AI编程到小程序容器,外卖App开发实战

在2025年快速迭代的技术生态中,开发者构建App的路径愈发多样化。本文以开发一个同城外卖App为例,对比当前主流的AI编程工具(如Cursor、GitHub Copilot、Trae)与小程序容器技术(如FinClip)的优劣势、难易度及…

深度学习入门到实战:用PyTorch打通数学、张量与模型训练全链路​

本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 一. 人工智能、机器学习与深度学习的关系 1.1 概念层次解析 人工智能(AI):使机器模拟人类智能的广义领域 机器学…

windows服务器部署jenkins工具(一)

jenkins作为一款常用的构建发布工具,极大的简化了项目部署发布流程。jenkins通常是部署在linux服务上,今天给大家分享的是windows服务器上如何搭建jenkins发布工具。 1.首先第一步还是看windows安装docker 这篇文章哈,当然也可以不采用docke…

前端开发规范性利器系列之:ESLint

前言 我是一名从事低代码平台研发的前端CV程序猿,有几十名像我一样的小伙伴协同研发。在长期的多人协作和滚动迭代中,不出意外,代码中会充斥各种“坏味道”,如代码风格不统一、扩展性和灵活性降低等问题。我们是如何解决这些问题的…