Python 实现Web 请求与响应

06-01 1632阅读

目录

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

1.web请求

2.web响应

3.HTTP协议概述

4.常见的HTTP状态码包括:

二:python的requests库

1.安装requests库

2.发送GET请求

3.发送POST请求

4.处理响应头和状态码

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

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

三:处理JSON响应

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

四:文件操作

1.打开文件的模式

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

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

(2)示例:打开文件并使用模式

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

2.读取文件

(1)read()方法

(2)readline()方法

(3)readlines()方法

3.写入文件

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

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

4.下载文件示例

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

6.其他常用文件操作

(1)获取文件信息

(2)删除文件

五:错误处理与异常捕获

1.try语句的使用

2.示例:捕获常见异常


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

1.web请求

定义:客户端(如浏览器)向服务器发送的获取资源或执行操作的请求。

组成部分:

  • 请求行:包含请求方法(如 GET、POST)、URL、协议版本(如 HTTP/1.1)。
  • 请求头:包含客户端信息(如 User-Agent)、请求参数(如 Content-Type)等。
  • 请求体(可选):发送的数据(如表单数据、JSON),常见于 POST 请求。

    2.web响应

    定义:服务器接收到请求后返回给客户端的结果。

    组成部分:

    • 状态行:包含协议版本、状态码(如 200 OK)、状态描述。
    • 响应头:包含服务器信息(如 Server)、数据类型(如 Content-Type)等。
    • 响应体:返回的实际数据(如 HTML、JSON、文件内容)。

      3.HTTP协议概述

      超文本传输协议(HTTP) 是 Web 请求与响应的通信基础,基于 客户端 - 服务器模型,具有以下特点:

      • 无状态:每次请求独立,服务器不保留客户端历史信息。
      • 方法多样:常用方法包括 GET(获取资源)、POST(提交数据)、PUT(更新资源)、DELETE(删除资源)等。
      • 版本迭代:常见版本有 HTTP/1.1(主流)、HTTP/2(性能优化)、HTTP/3(基于 UDP 的 QUIC 协议)。

        4.常见的HTTP状态码包括:

        状态码分类说明
        200成功请求成功处理(如页面正常返回)。
        201成功请求创建新资源成功(如用户注册)。
        301重定向资源永久移动,自动跳转至新 URL。
        400客户端错误请求语法错误(如参数缺失)。
        401客户端错误未授权(需提供认证信息)。
        403客户端错误禁止访问(权限不足)。
        404客户端错误资源未找到(URL 错误)。
        500服务器错误服务器内部错误(如代码崩溃)。

        二:python的requests库

        1.安装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.get () 用于发送 GET 请求,获取指定 URL 的数据。
        • response.status_code 获取 HTTP 响应状态码。
        • response.text 获取响应的正文内容(通常是 HTML 或 JSON 数据)。
        • response.headers 获取响应头。
        • len (response.text) 返回响应正文的长度,帮助我们了解返回内容的大小 。

          3.发送POST请求

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

                    四:文件操作

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

                    1.打开文件的模式

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

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

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

                      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.写入文件

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

                      Python 中使用open()函数打开文件时,若指定模式为'w'(写入模式)、'w+'(读写模式,文件不存在则创建)或'a'(追加模式) 、'a+'(追加读写模式)等可写模式,就可以通过文件对象的write()方法写入内容。write()方法接受一个字符串参数,将其写入文件。

                      示例代码:

                      with open('output.txt', 'w') as file:
                          file.write("这是通过 write 方法写入的一行文字。\n")

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

                      writelines()方法用于将一个字符串序列(如列表,其中每个元素为一行字符串)写入文件。它不会自动添加换行符,需要在字符串中自行包含。

                      示例代码:

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

                      4.下载文件示例

                      使用 Python 的requests库可以实现文件下载。以下是从指定 URL 下载文件并保存到本地的示例:

                      import requests
                      url = "https://example.com/some_file.jpg"  # 替换为实际文件 URL
                      local_filename = 'downloaded_file.jpg'
                      response = requests.get(url, stream=True)
                      with open(local_filename, 'wb') as file:
                          for chunk in response.iter_content(chunk_size=8192):
                              if chunk:
                                  file.write(chunk)
                      

                      上述代码中,stream=True使请求以流的形式获取数据,iter_content()按指定块大小迭代读取响应内容,然后逐块写入本地文件。

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

                      • 文件打开模式选择:根据需求正确选择文件打开模式,如读取用'r',写入用'w'或'a'等,避免因模式错误导致数据丢失或操作失败。
                      • 文件关闭:使用完文件后要确保关闭,with语句是一种安全简便的方式,可自动管理文件关闭,防止资源泄漏。若不使用with,记得手动调用file.close() 。
                      • 权限问题:确保程序运行有足够权限对文件进行相应操作,如写入、删除等,否则会引发权限错误。

                        6.其他常用文件操作

                        (1)获取文件信息

                        可以使用os模块获取文件相关信息,例如文件大小、修改时间等。示例代码:

                        import os
                        file_path = 'example.txt'
                        file_size = os.path.getsize(file_path)  # 获取文件大小(字节数)
                        modified_time = os.path.getmtime(file_path)  # 获取文件最后修改时间(时间戳)
                        print(f"文件大小: {file_size} 字节,最后修改时间: {modified_time}")

                        (2)删除文件

                        使用os模块的remove()函数可以删除文件。示例代码:

                        import os
                        file_path = 'to_be_deleted.txt'
                        if os.path.exists(file_path):
                            os.remove(file_path)
                            print(f"{file_path} 已成功删除。")
                        else:
                            print(f"{file_path} 不存在。")

                        五:错误处理与异常捕获

                        1.try语句的使用

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

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

                          2.示例:捕获常见异常

                          下示例展示捕获文件打开失败(FileNotFoundError)和类型错误(TypeError) :

                          try:
                              with open('nonexistent_file.txt', 'r') as file:  # 尝试打开不存在的文件
                                  content = file.read()
                              data = "string" + 1  # 会引发类型错误的操作
                          except FileNotFoundError as e:
                              print(f"文件未找到异常: {e}")
                          except TypeError as e:
                              print(f"类型错误异常: {e}")
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

相关阅读

目录[+]

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