Python 中的 HTTP 编程入门,如何使用 Requests 请求网络

ops/2024/9/24 7:45:30/
http://www.w3.org/2000/svg" style="display: none;">

Python 中的 HTTP 编程入门

HTTP(超文本传输协议)是现代网络通信的基础,几乎所有的网络应用都依赖于 HTTP 协议进行数据交换。在 Python 中,处理 HTTP 请求和响应非常简单,可以通过内置的 http 模块或第三方库如 requests 来实现。本文将详细介绍 Python 中的 HTTP 编程,包括基本概念、常用操作、RESTful API 的实现等,适合新手学习和理解。

https://i-blog.csdnimg.cn/direct/bcf1e47b89a445e0afdcf68a1fb72950.png" alt="在这里插入图片描述" />

一、什么是 HTTP?

HTTP(HyperText Transfer Protocol)是一个无状态的应用层协议,主要用于客户端和服务器之间的数据传输。HTTP 协议的主要特点包括:

  • 请求-响应模型:客户端发送请求,服务器处理请求并返回响应。
  • 无状态:每个请求都是独立的,服务器不会记住前一个请求的状态。
  • 支持多种数据格式:HTTP 可以传输文本、图像、视频等多种类型的数据。

1.1 HTTP 请求

HTTP 请求由以下部分组成:

  • 请求行:包含请求方法(如 GET、POST)、请求 URL 和 HTTP 版本。
  • 请求头:包含请求的附加信息(如浏览器类型、接受的内容类型等)。
  • 请求体:可选部分,通常用于 POST 请求,包含要发送的数据。

1.2 HTTP 响应

HTTP 响应由以下部分组成:

  • 状态行:包含 HTTP 版本、状态码(如 200、404)和状态信息。
  • 响应头:包含响应的附加信息(如内容类型、内容长度等)。
  • 响应体:实际的响应数据(如 HTML 页面、JSON 数据等)。

二、Python 中的 HTTP 编程

Python 提供了多个模块和库来处理 HTTP 请求和响应。最常用的库是 requests,它功能强大且易于使用。

2.1 安装 Requests 库

首先,需要确保安装了 requests 库。可以使用以下命令安装:

pip install requests

2.2 使用 Requests 进行 HTTP 请求

下面是一些常见的 HTTP 请求方法及其示例:

2.2.1 GET 请求

GET 请求用于从服务器获取数据。以下是一个简单的 GET 请求示例:

python">import requestsresponse = requests.get('https://jsonplaceholder.typicode.com/posts')
print(response.status_code)  # 打印状态码
print(response.json())        # 打印返回的 JSON 数据
2.2.2 POST 请求

POST 请求用于向服务器发送数据。以下是一个简单的 POST 请求示例:

python">import requestsdata = {'title': 'foo','body': 'bar','userId': 1
}response = requests.post('https://jsonplaceholder.typicode.com/posts', json=data)
print(response.status_code)  # 打印状态码
print(response.json())        # 打印返回的 JSON 数据
2.2.3 PUT 请求

PUT 请求用于更新服务器上的资源。以下是一个简单的 PUT 请求示例:

python">import requestsdata = {'id': 1,'title': 'updated title','body': 'updated body','userId': 1
}response = requests.put('https://jsonplaceholder.typicode.com/posts/1', json=data)
print(response.status_code)  # 打印状态码
print(response.json())        # 打印返回的 JSON 数据
2.2.4 DELETE 请求

DELETE 请求用于删除服务器上的资源。以下是一个简单的 DELETE 请求示例:

python">import requestsresponse = requests.delete('https://jsonplaceholder.typicode.com/posts/1')
print(response.status_code)  # 打印状态码

三、处理 HTTP 响应

在处理 HTTP 响应时,我们通常需要获取状态码、响应头和响应体。下面是一些常用的操作:

3.1 获取状态码

状态码表示请求的处理结果,常见状态码包括:

  • 200:请求成功。
  • 404:请求的资源未找到。
  • 500:服务器内部错误。

获取状态码的示例:

python">response = requests.get('https://jsonplaceholder.typicode.com/posts')
print(f"状态码: {response.status_code}")

3.2 获取响应头

响应头包含服务器返回的附加信息,可以通过 headers 属性获取:

python">response = requests.get('https://jsonplaceholder.typicode.com/posts')
print("响应头:")
for key, value in response.headers.items():print(f"{key}: {value}")

3.3 获取响应体

响应体是实际的数据内容,可以通过 textjson() 方法获取:

python">response = requests.get('https://jsonplaceholder.typicode.com/posts')
print("响应体:")
print(response.text)  # 以字符串形式获取
print(response.json())  # 以 JSON 格式获取

四、使用 HTTP 进行 API 调用

RESTful API(Representational State Transfer)是现代网络应用的主要架构风格,允许客户端与服务器之间进行无缝的数据交互。在 Python 中,我们可以使用 requests 库轻松地与 RESTful API 进行交互。

4.1 了解 RESTful API

RESTful API 的基本原则包括:

  • 使用 HTTP 方法(如 GET、POST、PUT、DELETE)表示操作。
  • 使用 URL 表示资源。
  • 采用 JSON 格式进行数据传输。

4.2 实际示例:与 RESTful API 交互

以 JSONPlaceholder API 为例,它是一个免费的在线 REST API,用于测试和原型开发。

4.2.1 获取资源
python">import requestsresponse = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print("获取资源:")
print(response.json())
4.2.2 创建资源
python">import requestsdata = {'title': 'new post','body': 'this is a new post','userId': 1
}response = requests.post('https://jsonplaceholder.typicode.com/posts', json=data)
print("创建资源:")
print(response.json())
4.2.3 更新资源
python">import requestsdata = {'id': 1,'title': 'updated post','body': 'this post has been updated','userId': 1
}response = requests.put('https://jsonplaceholder.typicode.com/posts/1', json=data)
print("更新资源:")
print(response.json())
4.2.4 删除资源
python">import requestsresponse = requests.delete('https://jsonplaceholder.typicode.com/posts/1')
print("删除资源:")
print(f"状态码: {response.status_code}")  # 204 表示成功删除

五、使用 Flask 构建简单的 HTTP 服务器

在 Python 中,我们可以使用 Flask 等框架快速构建 HTTP 服务器。下面是一个简单的 Flask 应用示例,演示如何处理 HTTP 请求。

5.1 安装 Flask

首先,需要确保安装了 Flask。可以使用以下命令安装:

pip install Flask

5.2 创建 Flask 应用

以下是一个简单的 Flask 应用代码:

python">from flask import Flask, request, jsonifyapp = Flask(__name__)@app.route('/posts', methods=['GET', 'POST'])
def handle_posts():if request.method == 'GET':# 返回所有帖子return jsonify({"posts": []})  # 返回一个空列表作为示例elif request.method == 'POST':data = request.jsonreturn jsonify({"message": "Post created", "data": data}), 201@app.route('/posts/<int:post_id>', methods=['PUT', 'DELETE'])
def handle_post(post_id):if request.method == 'PUT':data = request.jsonreturn jsonify({"message": "Post updated", "data": data})elif request.method == 'DELETE':return jsonify({"message": "Post deleted"}), 204if __name__ == '__main__':app.run(debug=True)

5.3 运行 Flask 应用

将上述代码保存为 app.py,在终端中运行:

python app.py

Flask 默认在 localhost:5000 启动服务。可以使用 curl 或 Postman 测试 API。

六、总结

HTTP 编程是现代网络应用开发的重要基础,Python 提供了强大的库和框架,使得与 HTTP 进行交互变得非常简单。通过本文的介绍,你应该对 Python 中的 HTTP 编程有了初步的了解,包括使用 requests 库发送 HTTP 请求、处理响应、与 RESTful API 交互以及使用 Flask 创建简单的 HTTP 服务器。

掌握了这些基础知识后,你可以在实际项目中应用 HTTP 编程,构建更复杂的网络应用。希望你在 HTTP 编程的学习中获得乐趣,深入探索更多的网络编程知识!


http://www.ppmy.cn/ops/115188.html

相关文章

【网站架构部署与优化】源码编译安装LAMP

文章目录 LAMP架构概述各组件的主要作用构建LAMP平台的安装顺序 编译安装Apache httpd服务指南1. 准备工作1.1 关闭防火墙并传输软件包1.2 安装环境依赖包 2. 配置软件模块2.1 解压软件包2.2 移动apr组件包2.3 配置httpd 3. 编译及安装4. 优化配置4.1 配置文件路径4.2 添加http…

asp.net core web api 使用apollo配置更改回调监听

安装依赖包 > Com.Ctrip.Framework.Apollo 2.10.0 2.10.0> Com.Ctrip.Framework.Apollo.ConfigAdapter.Yaml 2.9.0 2.9.0 > Com.Ctrip.Framework.Apollo.Configuration 2.10.2 2.10.2> Com.Ctrip.Framework.Apollo.…

patch 命令:补丁的应用

一、命令简介 ​diff​ 和 patch​ 是传统的文件比较和应用差异的工具&#xff0c;而 git​ 是一个更现代、功能更全面的版本控制系统&#xff0c;它内置了 diff​ 和 patch​ 的功能&#xff0c;并且提供了更多用于代码管理和协作的高级特性。 diff, patch 和 git 之间的关系…

冒泡排序bubble sort

冒泡排序&#xff08;bubble sort&#xff09;通过连续地比较与交换相邻元素实现排序。这个过程就像气泡从底部升到顶部一样&#xff0c;因此得名冒泡排序。 算法流程 def bubble_sort(nums: list[int]):"""冒泡排序"""n len(nums)# 外循环&…

ubuntu、linux安装redis(使用tar包的方式)

目录 1、准备redis的tar包 2、执行make 3、执行make install 4、运行redis 5、总结 1、准备redis的tar包 去官网或者github上下载对应的tar包&#xff0c;我下载的是 redis-6.2.14.tar.gz 上传到ubuntu后&#xff0c;使用指令进行解压&#xff1a; tar -xvf redis-6.2.14.t…

【软件造价咨询】软件每年运维费用取开发费用百分之几合适

应用软件的运维费用相对于系统开发建设费用的占比因项目而异&#xff0c;但可以通过一些行业标准和基准数据来进行估算。根据北京软件造价评估联盟2020至2023年发布的《中国软件行业基准数据》CSBMK文件&#xff0c;在这项文件中用百分位数统计列出了“应用软件运维费用占比”的…

MapReduce基本原理

目录 整体执行流程​ Map端执行流程 Reduce端执行流程 Shuffle执行流程 整体执行流程 八部曲 读取数据--> 定义map --> 分区 --> 排序 --> 规约 --> 分组 --> 定义reduce --> 输出数据 首先将文件进行切片&#xff08;block&#xff09;处理&#xff…

十三 系统架构设计(考点篇)

1 软件架构的概念 一个程序和计算系统软件体系结构是指系统的一个或者多个结构。结构中包括软件的构件&#xff0c;构件 的外部可见属性以及它们之间的相互关系。 体系结构并非可运行软件。确切地说&#xff0c;它是一种表达&#xff0c;使软件工程师能够&#xff1a; (1)分…