Python 实现Web请求与响应

06-01 1480阅读

目录

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

0. 概述

1. web 请求

请求的组成

常见请求方法

2. web 响应

响应的组成

3. HTTP 协议概述

4. 常见的Http 状态码含义

高频状态码详解

二、Python 的 requests 库

1. 安装 requests 库

2. 发送 GET 请求

Python 实现Web请求与响应
(图片来源网络,侵删)

3. 发送POST请求

4. 处理响应头和状态码

Python 实现Web请求与响应
(图片来源网络,侵删)

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

6. 发送带单数据的 POST 请求

Python 实现Web请求与响应
(图片来源网络,侵删)

三、处理 JSON 响应

四、文件操作

1. 打开文件的模式

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

(2)示例

2. 读取文件

(1)read() 方法

(2)readline() 方法

(3)readlines() 方法 

3.写入文件

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

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

4. 下载文件示例

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

6. 其他常用文件操作

(1)获取文件信息

(2)删除文件


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

0. 概述

Web 请求与响应是客户端(如浏览器)与服务器之间交互的核心机制:

  • 请求(Request):客户端向服务器索取资源(如网页、图片)或提交数据(如表单信息)。

  • 响应(Response):服务器处理请求后返回结果(如 HTML 内容、错误提示)。

  • 通信协议:基于 HTTP/HTTPS 协议,遵循无状态、明文(HTTPS 加密)传输规则。

    1. web 请求

    请求的组成

            请求行:定义请求方法、目标 URL 和协议版本。

            请求头(Headers):传递客户端环境信息或附加要求。

            请求体(Body):仅某些请求方法(如 POST、PUT)携带数据。

    常见请求方法
    方法用途
    GET获取资源(无请求体)
    POST提交数据(如表单、文件上传)
    PUT更新服务器上的资源(全量替换)
    DELETE删除指定资源
    PATCH更新资源的部分内容

    2. web 响应

    响应的组成

            状态行:包含协议版本、状态码和状态描述。

            响应头(Headers):描述服务器信息或资源属性。

            响应体(Body):返回客户端请求的内容(如 HTML、JSON、文件)。

    3. HTTP 协议概述

    • 版本演进:

      • HTTP/1.1:主流版本,支持持久连接(Keep-Alive)。

      • HTTP/2:多路复用、头部压缩,提升性能。

      • HTTP/3:基于 QUIC 协议,解决队头阻塞问题。

      • 特点:

        • 无状态:服务器不保存客户端状态(依赖 Cookie/Session 管理)。

        • 明文传输:HTTP 不加密(HTTPS 通过 SSL/TLS 加密)。

          4. 常见的Http 状态码含义

          状态码分类典型示例
          1xx信息性100 Continue(继续发送请求体)
          2xx成功200 OK(请求成功)
          3xx重定向301 Moved Permanently(永久重定向)302 临时重定向
          4xx客户端错误404 Not Found(资源不存在)
          5xx服务器错误500 Internal Server Error(服务器内部错误)
          高频状态码详解
          • 200 OK:请求成功,响应体中包含目标数据。

          • 301 vs 302:

            • 301:资源永久迁移,浏览器缓存新地址。

            • 302:资源临时重定向,下次请求仍访问原地址。

            • 403 Forbidden:服务器拒绝请求(无权限)。

            • 404 Not Found:请求的资源不存在。

            • 500 Internal Error:服务器处理请求时发生未知错误(如代码崩溃)。

            • 503 Service Unavailable:服务器暂时不可用(如维护或过载)。

              二、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
              --安装requests库
              pip3 install requests

              2. 发送 GET 请求

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

              3. 发送POST请求

              设置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)
              	#输出响应内容(JSON格式)
              	print('响应内容',response.json()                           

              4. 处理响应头和状态码

              响应头提供关于服务器的信息,状态码则告诉我们请求是否成功。

              可以通过 response.headers 获取响应头,通过 response.status_code 获取状态码

                  #指定模块
              	import requests
              	#发送get请求(目标)
              	response=requests.get('https://httpbin.org/get')
              #获取响应头
              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, params=params)
                #输出响应内容
                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-form-urlencoded 格式。

                    三、处理 JSON 响应

                    许多 Web API 返回的数据格式是 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 数据。

                      四、文件操作

                      1. 打开文件的模式

                      (1)常见的文件打开模式
                      模式描述
                      r只读模式(默认),文件必须存在,否则报错。
                      w写入模式,若文件存在则清空内容,不存在则创建。
                      a追加模式,在文件末尾追加内容,文件不存在则创建。
                      r+读写模式,文件必须存在,可读写文件内容。
                      w+读写模式,文件不存在则创建,存在则清空内容。
                      a+读写追加模式,文件不存在则创建,写入时始终追加到末尾。
                      rb/wb二进制模式(如处理图片、视频等非文本文件)。
                      (2)示例
                          #以只读模式打开文件(需要有这个文件)
                      	with open('example.txt','r') as file:
                      	content = file.read()
                      	print(content)
                      	#以写入模式(会覆盖现有文件)
                      	with open('example.txt','w') as file:
                      	file.write("nihao")
                      	#以追加模式(\n是换行)
                      	with open('example.txt','a') as file:
                      	file.write("nihao""张三"\n)
                          # 二进制读取(如图片)  
                          with open("image.jpg", "rb") as f:  
                          binary_data = f.read()  

                      2. 读取文件

                      (1)read() 方法
                      • 功能:读取文件全部内容,返回字符串。

                      • 适用场景:小文件一次性读取。

                        with open("data.txt", "r") as f:  
                            content = f.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("data.txt", "r") as f:  
                                lines = f.readlines()  # 返回列表,如 ["Line1\n", "Line2\n"]  
                                for line in lines:  
                                    print(line.strip())  

                            3.写入文件

                            (1)使用 write() 方法写入文件
                            • 功能:写入字符串到文件。

                              with open("output.txt", "w") as f:  
                                  f.write("Line 1\n")  
                                  f.write("Line 2\n")  
                              (2)使用 writelines() 方法写入多行数据
                              • 功能:写入字符串列表到文件(需自行添加换行符)。

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

                                4. 下载文件示例

                                vim eee.py
                                	import requests
                                	url = '图像链接'      #代表图像文件
                                	response = requests.get(url)
                                	#判断语句,判断状态码是否为200,正确则下载图像到本地
                                if response.status_code==200:
                                	with open ('123456.jpg','wb') as file:
                                	file.write(response.content)
                                	print("下载成功")
                                else:
                                	print("下载失败,状态码:", response.status_code)  
                                示例图路径:https://c-ssl.duitang.com/uploads/blog/202203/13/20220313195230_d82b9.jpg

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

                                • 关闭文件:使用 with 语句自动管理文件关闭,避免资源泄漏。

                                • 大文件处理:避免用 read() 一次性读取大文件,改用逐行读取或分块读取。

                                • 异常处理:捕获文件操作可能引发的异常(如 FileNotFoundError)。

                                • 路径问题:使用绝对路径或确保相对路径正确(相对于当前工作目录)。

                                • 编码问题:文本文件读写时指定编码(如 encoding='utf-8'),避免乱码。

                                • 权限问题:确保程序对目标文件有读写权限。

                                • 常见异常类型
                                  异常触发场景
                                  FileNotFoundError文件不存在时尝试读取(如 open("r"))。
                                  PermissionError无权限访问文件(如只读文件尝试写入)。
                                  IsADirectoryError尝试以文件模式操作目录。
                                  UnicodeDecodeError文本文件编码不匹配(如用 utf-8 读取 gbk 文件)。
                                • 场景最佳实践
                                  错误捕获使用 try-except 捕获特定异常,避免程序崩溃。
                                  大文件处理分块读取或逐行处理,减少内存占用。
                                  编码问题明确指定 encoding,或用 chardet 检测编码。
                                  并发安全使用文件锁防止多进程写入冲突。
                                  资源管理使用 with 语句和 tempfile 模块。
                                  磁盘空间写入前检查剩余空间,预防写入失败

                                  6. 其他常用文件操作

                                  (1)获取文件信息

                                  使用 os 模块获取文件元数据:

                                  import os  
                                  file_path = "data.txt"  
                                  file_info = os.stat(file_path)  
                                  print("文件大小:", file_info.st_size, "bytes")  
                                  print("最后修改时间:", file_info.st_mtime)  
                                  (2)删除文件

                                  使用 os.remove():

                                  import os  
                                  if os.path.exists("temp.txt"):  
                                      os.remove("temp.txt")  # 删除文件  
                                  else:  
                                      print("文件不存在!")  

                                  总结

                                  操作核心方法关键要点
                                  打开文件open()根据场景选择模式(r/w/a/rb等)。
                                  读取文件read(), readline(), readlines()大文件优先逐行读取。
                                  写入文件write(), writelines()注意换行符和文件关闭。
                                  文件管理os.stat(), os.remove()处理前检查文件是否存在。
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

相关阅读

目录[+]

取消
微信二维码
微信二维码
支付宝二维码