当前位置: 首页 > 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 请求与响应?

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库

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

2、发送GET请求

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

import requests#发送GET请求
response=requests.get('https://httpbin.org/get')#输出响应的状态码
print('状态码:',response.status_code)#输出响应的内容
print('响应内容:',response.text)#输出响应头
print('响应头:',response.headers)#获取响应内容的长度
print('头部长度:',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 requestsurl='https://httpbin.org/post'
data={'name':'zhangsan','age':20}
response=requests.post(url,data=data)print('状态码:',response.status_code)print(response.json())

代码解释:

requests.post()

用于发送 POST请求,将数据提交到服务器。

data参数

是一个字典,包含了我们要提交的数据。requests 会自动将其编码为application/x-www-form-urlencoded 格式。

response.json()

用于解析返回的 JSON 数据.

4、处理响应头和状态码

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

import requestsresponse=requests.get('https://httpbin.org/get')print('响应头:',response.headers)print('状态码:',response.status_code)print('内容类型:',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 requestsurl='https://httpbin.org/post'
params={'name':'zhangsan','age':20}
response=requests.get(url,params=params)print('响应内容:',response.json())

代码解释:

params

是一个字典,包含要传递的査询参数。

requests.get()

会自动将这些参数编码到 URL中。

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

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

import requestsurl='https://httpbin.org/post'
data={'username':'testuser','password':'mypassword'}
response=requests.post(url,data=data)print('响应的内容:',response.json())

代码解释:

data 参数是一个字典,包含表单提交的数据,requests 会自动将数据编码为application/x-www-fomm-urlencoded格式。

三、处理JSON响应

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

import requestsurl='https://httpbin.org/post'
response=requests.get(url)data=response.json()print('用户登录',data['login'])
print('用户名',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('111.txt','r') as file:content=file.read()print(content)#以写入模式打开文件,文件内容会被覆盖
with open('111.txt','w') as file:file.write('nihao!\n')#以追加模式打开文件,新的内容会追加到文件末尾
with open('111.txt','a') as file:file.write('nihao,zhangsan\n')#以二进制模式打开文件(例如读取图片)
with open('image.jpg','rb') as file:binary_data=file.read()print("读取到的二进制数据:",binary_data[:20])

2、读取文件

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

(1)read()方法

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

with open('111.txt','r') as file;content=file.read()print(content)

(2)readline()方法

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

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

(3)readlines()方法

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

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

3、写入文件

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

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

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

with open('111.txt','w') as file:file.write('第一行 \n')file.write('第二行 \n')

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

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

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

4、下载文件示例

我们可以通过requests库来下载文件,并将其保存到本地。例如,下载一个图片文件:

import requestsurl='https://img-s.msn.cn/tenant/amp/entityid/AA1Faw8x.img?w=600&h=337&m=6'#https://img-s.msn.cn/tenant/amp/entityid/AA1Faw8x.img?w=600&h=337&m=6为图片URL(网上随便点的链接,时间久了可能用不了了,换一个就行)
response=requests.get(url)#检查请求是否成功
if response.status_code==200:#使用二进制模式写入文件with open('123456.jpg','wb') as file:file.write(response.content)print('图像下载成功')
else:print('下载失败')

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

在进行文件操作时,需要注意以下几个问题:

文件是否存在:在打开文件时,必须确保文件路径正确。如果文件不存在,可以使用 os.path.exists()检查文件是否存在,或者使用try-except捕获FileNotFoundError异常。

import os if os.path.exists('111.txt'):with op('111.txt','r') as file:content=file.read()
else:print("文件不存在!")

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

try:with open('111.txt','w') as file:file.write("尝试写入只读文件”)except PermissionError:print("杈限不足,无法写入文件。")

文件自动关闭:使用with open()语句时,Python会自动管理文件的打开和关闭,无需显式调用file.close()。这有助于避免文件未关闭的问题,减少资源泄漏的风险。

6、其他常用文件操作

(1)获取文件信息

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

import osfile_path='111.txt'print("文件大小:",os.path.getsize(file_path),"字节")
print("文件修改时间:",os.path.getmtime(file_path))

(2)删除文件

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

import osfile_path='111.txt'
if os.path.exists(file_path):os.remove(file_path)print(f"{file_path} 已删除!")else:print("文件不存在!")

五、错误处理与异常捕获

在进行Web 请求时,可能会发生各种错误,例如网络超时、服务器错误等。requests 库通过异常处理机制帮助我们捕获这些错误。Python 的 try语句能够捕获和处理代码块中的异常,从而避免程序崩溃,并且提供了处理错误的机会。

1、try语句的使用

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

try块

包含可能会引发异常的代码。当代码运行过程中发生错误时,程序会跳到相应的except块进行处理。

except块

当 try块中的代码出现异常时,程序会跳转到except块执行。在 except 中可以指定要捕获的异常类型,如 Timeout、HTTPError 等。

else 块(可选)

如果try块中的代码没有抛出异常,则会执行else 块中的代码。

finally块(可选)

无论是否发生异常,finally 块中的代码都会执行,通常用于清理资源(如关闭文件、数据库连接等)

2、示例 :捕获常见异常

import requests
from requests.exceptions import RequestException,Timeout,HTTPErrortry:#发送 GET请求,并设置超时时间为 5秒response=requests.get('https://httpbin.org',timeout=5)#如果状态码不是 200,抛出 HTTPError 异常response.raise_for_status()    #如果状态码是 404或 500,抛出异常#如果请求成功,则输出响应内容print('Response Body:', response.text)#捕获请求超时异常
except Timeout:print('Request timed out")#捕获 HTTP 错误(如状态码 404、500等)
except HTTPError as http_err:print(f'HTTP error occurred: {http_err}')#捕获其他网络相关的错误
except RequestException as req_err:print(f'Request error occurred: {reg_err}')#可以在 finally 块中清理资源(如关闭文件或连接)
finally:print('Request attempt completed.')

代码解释:

1、try 块:首先发起 HTTP请求,设置超时时间为5秒,并使用response.raise_for_status()来检查响应的状态码。如果服务器返回了错误的状态码(如 404、500),raise_for_status()会抛出HTTPError 异常。

2、except 块

  • Timeout:如果请求超时(超过设置的5秒),程序会捕获到Timeout 异常,并打印“Request timed out”。
  • HTTPEror:如果响应的状态码表明出现 HTTP 错误(例如 404 表示未找到页面),程序会捕获到 HTTPError 异常,并打印相关错误信息。
  • Request Exception:捕获其他类型的网络相关错误(如连接问题、DNS 解析失败等)RequestException 是所有 requests 库异常的基类,可以捕获任何 requests 库抛出的异常

3、finally块:finally 中的代码无论是否发生异常都会被执行,通常用于释放资源或做一些收尾工作。这里我们仅打印“Request attempt completed”表示请求的结束。

异常处理总结:

  • 异常处理让我们在程序运行中捕获到错误并做出相应处理,避免程序崩溃。
  • 通过 try...except结构,可以精确捕获并处理不同类型的异常。
  • finally 块用于清理工作,在请求处理完成后可以释放资源 (如关闭文件、数据库连接等)。

相关文章:

  • 钢条切割(动态规划)
  • gcc版本选择和软链接gcc
  • 【工具】Quicker/VBA|PPT 在指定位置添加有颜色的参考线
  • 基于江协标准库所出现的定时器5678以及串口45等无法使用的问题解析
  • centos8 配置网桥,并禁止kvm默认网桥
  • Tomcat优化
  • LESS基础用法详解
  • 现代健康养生指南
  • 进销存管理系统:Java+Vue,含源码及文档,集成采购、销售、库存管理,实现数据互通,提升运营效率
  • 场景化应用实战系列六:检索问答系统
  • 力扣HOT100之二叉树: 236. 二叉树的最近公共祖先
  • ros2 多线程节点调度MultiThreadedExecutor
  • C++线程池----基于生产者消费者模式队列实现
  • 多元回归的假设检验
  • 算法题(153):哈夫曼编码
  • ArkTs中的尾随闭包
  • Linux系统:基础命令之 ls~pwd~cd
  • scratch课后一练--事件模块
  • 操作系统结构
  • Java字节码文件解析
  • 网站建设及推广好学习吗/seo网站排名优化工具
  • 手机网站 动态 页面 好 静态页面好/互联网电商平台有哪些
  • 山东企业建站系统信息/医院营销策略的具体方法
  • 国外的设计网站推荐/承接网络推广外包业务
  • 合肥餐饮网站建设/seo是什么意思为什么要做seo
  • 企业站系统/成都谷歌seo