python 实现 web 请求与相应
目录
一、 什么是 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 pip install --upgrade pip
在使用 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.get0用于发送 GET 请求,获取指定 URL的数据。
- response.status code 获取 HTTP 响应状态码。
- response.text 获取响应的正文内容(通常是HTML或JSON数据)。
- response.headers 获取响应头。
- len(response.text)返回响应正文的长度,帮助我们了解返回内容的大小。
3. 发送 POST 请求
POST 请求用于将数据提交到服务器,通常用于表单提交或上传文件。我们使用requests.post0)来发送 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-fomm-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,paramsparams) #输出响应内容 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-fomm-urlencoded格式。
三、 处理JSON 响应
许多 Web AP|返回的数据格式是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. 读取文件
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. 写入文件
Python提供了几种方法将数据写入文件。写入操作常用于日志记录、数据导出等场景。
(1) 使用 write()方法写入文件
write()方法将指定的字符串写入文件。若文件以 w模式打开,原文件内容会被覆盖;若以a模式打开内容会被追加到文件末尾。
with open('output.txt','w')as file: file.write("这是第一行数据。\n") file.write(“这是第二行数据。\n")
(2) 使用 writelines()方法写入多行数据
writelines()方法接受一个可选代对象(如列表、元组等),将其元素写入文件中,每个元素将作为一行写入文件。
lines =["第一行数据。\n","第二行数据。\n","第三行数据。\n", with open('output.txt','w')as file: file.writelines(lines)
4. 文件操作中的注意事项
在进行文件操作时,需要注意以下几个问题:
文件是否存在
在打开文件时,必须确保文件路径正确。如果文件不存在,可以使用os.path.exists()检查文件是否存在,或者使用try-except捕获FileNotFoundError异常。
import os if os.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("杈限不足,无法写入文件。")
5. 其他常用文件操作
(1) 获取文件信息
Python提供了 os和os.path模块,可以获职文件的大小、修改时间等信息。
import os file path ='example.txt' print("文件大小:",os.path.getsize(file path),"字节”)print("文件修改时间:",os.path.getmtime(file_path))
(2) 删除文件
使用os.remove()可以删除文件:
import os file path='example.txt" if os.path.exists(file path): os.remove(file path) print(f"{file_path} 已删除!") else: print("文件不存在!")
6. 错误处理与异常捕获
在进行Web 请求时,可能会发生各种错误,例如网络超时、服务器错误等。requests 库通过异常处理机制帮助我们捕获这些错误。Python 的 try语句能够捕获和处理代码块中的异常,从而避免程序崩溃,并且提供了处理错误的机会。
(1) try 语句的使用
try语句用于捕获和处理异常,它由三部分组成:
- try块:包含可能会引发异常的代码。当代码运行过程中发生错误时,程序会跳到相应的 except块进行处理。
- except块:当 try块中的代码出现异常时,程序会跳转到except块执行。在except 中可以指定要捕获的异常类型,如 Timeout、HTTPError 等。
- else 块(可选):如果try块中的代码没有抛出异常,则会执行 else块中的代码。
- finally 块(可选):无论是否发生异常,finally 块中的代码都会执行,通常用于清理资源(如关闭文件、数据库连接等)。
原文地址:https://blog.csdn.net/2501_91350469/article/details/148137049
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!