目录
一,什么web请求与响应
在Web开发中,请求与响应是客户端(通常是浏览器)与服务器之间进行数据交换的基本机制。以下是关于Web请求与响应的详细说明
1,web请求
Web请求是客户端向服务器发送的请求,用于获取或提交数据。它通常包含以下几个关键部分:
-
请求方法(HTTP Method):定义了请求的类型和目的。常见的HTTP方法包括:
- GET:用于请求数据,通常用于获取资源(如网页、图片等)。
- POST:用于提交数据,通常用于表单提交或上传文件。
- PUT:用于更新服务器上的资源。
- DELETE:用于删除服务器上的资源。
- PATCH:用于对资源进行部分更新。
-
请求头(Headers):包含关于请求的元信息,例如:
请求体(Body):在POST、PUT等请求中,用于传递数据。
2,web响应
Web响应是服务器对客户端请求的回复,通常包含以下部分:
-
状态码(Status Code):表示请求的处理结果。常见的状态码包括:
200 OK
:请求成功。404 Not Found
:请求的资源不存在。500 Internal Server Error
:服务器内部错误。401 Unauthorized
:未授权访问。
-
响应头(Headers):包含关于响应的元信息,例如:
Content-Type
:指定响应体的格式(如text/html
、application/json
)。Set-Cookie
:用于在客户端设置Cookie。Cache-Control
:指示客户端如何缓存响应。
-
响应体(Body):包含服务器返回的数据。例如,HTML页面、JSON数据或文件内容。
3,HTTP协议概述
HTTP(HyperText Transfer Protocol,超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。它是万维网(WWW)数据通信的基础,主要用于客户端和服务器之间的通信。
HTTP定义了多种请求方法,常用的包括:
- GET:请求指定资源。
- POST:向指定资源提交数据。
- PUT:更新指定资源。
- DELETE:删除指定资源。
- HEAD:获取资源的元信息。
4,常见的HTTP状态码包括
HTTP响应中包含状态码,用于表示请求的处理结果。常见的状态码有:
- 200 OK:请求成功。
- 404 Not Found:请求的资源未找到。
- 500 Internal Server Error:服务器内部错误。
二,python的requests库
1,安装requests库
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
pip3 install requests
2,发送GET请求
vim aaa.py
import requests
response = requests.get('https://httpbin.org/get')
print('状态码:',response.status_code)
print(response.text)
print('响应头:',response.headers)
print('头部长度',len(response.text))
python3 aaa.py
3,发送POST请求
vim bbb.py
import requests
url='https://httpbin.org/post'
data={'name':'zhangsan','age':20}
response=requests.post(url.data=data)
print('状态码:',response.status_code)
print(response.json())
python3 bbb.py
三,处理JSON响应
vim ccc
import requests
url='https://httpbin.org/post'
data={'name':'zhangsan','age':20}
response=requests.post(url.data=data)
print('状态码:',response.status_code)
print(response.json())
python3 ccc.py
四,文件操作
文件操作是计算机编程中处理文件的基本功能,主要包括文件的创建、读取、写入、删除和管理等操作。文件操作是程序与外部数据交互的重要方式,广泛应用于数据存储、配置管理、日志记录等场景。
1,打开文件的模式
在编程中,打开文件时通常需要指定文件的打开模式。不同的模式决定了文件的操作方式,例如读取、写入、追加等。以下是常见的文件打开模式及其用途:
(1)常见的文件打开模式
r: | 只读模式,文件必须存在 |
w: | 写入,如果文件不存在,会创建一个新的,文件存在则会覆盖 |
a: | 追加 |
x: | 独占创建 |
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,读取文件
(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())
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('output.txt','w') as file:
file.write("第一行.\n")
file.write("第二行.\n")
(2)使用writelines()方法写入多行数据
lines = ["第一行。\n","第二行。\n","第三行。\n"]
with open('output.txt','w') as file:
file.writelines(lines)
4,下载文件示例
import requests
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}")
五,错误处理与异常捕获
1,try语句的使用
try语句用于捕获和处理异常,它由三部分组成:
try块: | 包含可能会引发异常的代码。当代码运行过程中发生错误时,程序会跳到相应的进行处理。 |
except 块 | 当 try块中的代码出现异常时,程序会跳转到except块执行。在except 中可以指定要捕获的异常类型,如Timeout、HTTPError等。 |
else 块(可选): | 如果 try块中的代码没有抛出异常,则会执行else块中的代码, |
finally块(可选): | 无论是否发生异常,finally 块中的代码都会执行,通常用于清理资源 (如关闭文件、数据库连接等)。 |
2,示例捕获常见异常
print('开始一个除法运算')
while True:
str1='请输入第一个整数\n'
str2='请输入第二个整数\n'
try:
op1=int(input(str1))
op2=int(input(str2))
result=op1/op2
print(result)
except RequestEcception as req_err:
print('你输入的数字有问题')
代码解释
1,try块:首先发起 HTTP 请求,设置超时时间为5秒,并使用response.raise for status()来检查响应的状态码。如果服务器返回了错误的状态码(如404、500),raise for status()会抛出
HTTPError 异常。
2,except块:
Timeout:如果请求超时(超过设置的5秒),程序会捕获到Timeout异常,并打印“Request
timed out"
HTTPError:如果响应的状态码表明出现 HTTP 错误(例如 404表示未找到页面),程序会捕获
到 HTTPError 异常,并打印相关错误信息,
RequestException:捕获其他类型的网络相关错误(如连接问题、DNS 解析失败等)
RequestException是所有 requests 库异常的基类,可以捕获任何requests 库抛出的异常
3,.finally 块:
finally 中的代码无论是否发生异常都会被执行。通常用于释放资源或做一些收尾工作。这里我们仅打印“Request attempt completed.”表示请求的结束。
异常处理总结:
异常处理让我们在程序运行中捕获到错误并做出相应处理,避免程序崩溃。 |
通过 try..except结构,可以精确捕获并处理不同类型的异常。 |
finally 块用于清理工作,在请求处理完成后可以释放资源(如关闭文件、数据库连接等) |