python实现web请求与响应

发布于:2025-05-23 ⋅ 阅读:(14) ⋅ 点赞:(0)

目录

什么是web请求与响应

web响应

http协议概述

常见的http状态码包括

python的requests库

安装requests库

发送GET请求

发送post请求

处理响应头和状态码

发送带查询参数的GET请求

发送带表单数据的POST请求

处理JSON响应

文件操作

打开文件模式

常见的文件打开模式

打开文件并使用模式

读取文件

read()方法

readline()方法

readlines(方法)

写入文件

使用write()方法写入文件

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

下载文件示例

文件操作中的注意事项

其他常用文件操作

获取文件信息

删除文件

错误处理与异常捕获

try语句的使用

示例捕获常见的异常


什么是web请求与响应

Web请求与响应是Web通信的基础。Web请求由客户端发起,服务器处里后返回响应

web请求

Web请求通常包括以下几个部分:

请求行:包括请求方法(如GET、POST、PUT、DELETE)、URL和HTTP协议版本(如HTTP/1.1)。
请求头:包含关于客户端信息、请求体类型、浏览器类型等的元数据
请求体:在POST请求中包含用户提交的数据,如表单数据或文件

web响应

Web响应由服务器返回,通常包括以下几个部分:

响应行:包括HTTP协议版本、状态码和状态消息。
响应头:包括关于响应的信息,如内容类型、服务器信息等。
响应体:包含实际返回的数据(如HTML页面、JSON数据等)。

http协议概述

HTTP(Hypertext Transfer Protocol)是Web上传输数据的协议,负责浏览器与服务器之间的通信。常见的HTTP方法有:

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

常见的http状态码包括

200OK:请求成功,服务器返回所请求的数据。
301Moved Permanently:资源已永久移动。
404NotFound:请求的资源不存在。
500 Internal Server Error:服务器内部错误。

python的requests库

Python的requests库是发送HTTP请求和处理响应的最常用工具,它提供了简单、直观的API,使得Web请求和响应的操作变得非常容易。通过requests,我们可以轻松地发送GET、POST请求,处理JSON响应,管理请求头等。

安装requests库

在使用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

发送GET请求

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

import requests
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)返回响应正文的长度,帮助我们了解返回内容的大小。

发送post请求

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

import requests
url = 'https://httpbin.org/post
data = {'name':"Alice',"age': 25}
print('Status Code:', response.status_code)
print('Response Body:', response.json())

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

处理响应头和状态码

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

import requests
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-T)ype.)

 response.headers返回响应头,包含如Content-Type、Date,Server等信息。
response.status_code返回HTTP状态码。
response.headers.get(Content-Type')获取响应的内容类型(如text/htm)I application/json)

发送带查询参数的GET请求

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

import requests
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中

发送带表单数据的POST请求

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

import requests
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响应

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

import requests
url = "https://api.github.com/users/octocat
response = requests.get(url)
data = response.json()
print('User Login:',data['login'])
print('User Name:',data['name'])

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

文件操作

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

打开文件模式

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

常见的文件打开模式

r:只读模式(默认模式)。文件必须存在。如果文件不存在,会抛出FileNotFoundError异常。W:写入模式。如果文件存在,会覆盖文件内容。如果文件不存在,会创建新文件
a:追加模式。如果文件存在,写入的数据会追加到文件末尾;如果文件不存在,会创建新文件x:独占创建模式。若文件已存在,操作会失败并抛出FileExistsError异常。此模式通常用于创建文件时防止覆盖现有文件。rb:二进制读取模式,用于读取非文本文件(如图片、音频文件)。wb:二进制写入模式,用于写入非文本文件。读写模式。文件必须存在。既可以读取文件内容,也可以写入数据。读写模式。如果文件存在,会覆盖文件内容;如果文件不存在,会创建新文件。a+:读写模式。文件存在时,数据会追加到文件末尾;如果文件不存在,会创建新文件。rb+:二进制读写模式。

打开文件并使用模式

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])

读取文件

Python中的文件读取功能非常强大有常见的几种

read()方法

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

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

readline()方法

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

with open('example.txt', 'r')as file:
line = file.readline()
while line:
print(line.strip())
line = file.readline()

readlines()方法

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

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

写入文件

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

使用write()方法写入文件

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

with open('output.txt','w')as file:
file.write("这是第一行数据。\n")
file.write("这是第二行数据。\n")

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

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

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

下载文件示例

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

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)
else:
print(f"下载失败,状态码:{response.status_code}")

文件操作中的注意事项

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

import os
ifos.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("权限不足,无法写入文件。")

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

其他常用文件操作

获取文件信息

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

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

删除文件

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

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

错误处理与异常捕获

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

try语句的使用

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

示例捕获常见的异常

import requests
from requests.exceptions import RequestException,Timeout,HTTPError
try:
response = requests.get('https://www.example.com',timeout=5)
response.raise_for_status
print(Response Body:', response.text)
except Timeout:
print('
Request timed out')
except HTTPError as http_err:
print(f'HTTP error occurred:{http_err}')
except RequestException as req_err:
print(f'Request error occurred:{req_err}')
finally:
print('Request attempt completed.')

1.try块:首先发起HTTP请求,设置超时时间为5秒,并使用response.raise_for_statusQ来检
查响应的状态码。如果服务器返回了错误的状态码(如404、500),aise_for_status()会抛出
HTTPError异常。2.except块:Timeout:如果请求超时(超过设置的5秒),程序会捕获到Timeout异常,并打印"Requesttimed out"HTTPError:如果响应的状态码表明出现HTTP错误(例如404表示未找到页面),程序会捕获到HTTPError异常,并打印相关错误信息。RequestException:捕获其他类型的网络相关错误(如连接问题、DNS解析失败等)。RequestException是所有requests库异常的基类,可以捕获任何requests库抛出的异常。3.finally块:finally中的代码无论是否发生异常都会被执行。通常用于释放资源或做一些收尾工作。这里我们仅打印"Request attempt completed."表示请求的结束。

异常处理总结:

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


网站公告

今日签到

点亮在社区的每一天
去签到