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

阅读 33

2024-09-23

Python 中的 HTTP 编程入门

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

在这里插入图片描述

一、什么是 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 请求示例:

import requests

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

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

import requests

data = {
    '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 请求示例:

import requests

data = {
    '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 请求示例:

import requests

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

三、处理 HTTP 响应

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

3.1 获取状态码

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

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

获取状态码的示例:

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

3.2 获取响应头

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

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

3.3 获取响应体

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

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 获取资源
import requests

response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print("获取资源:")
print(response.json())
4.2.2 创建资源
import requests

data = {
    '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 更新资源
import requests

data = {
    '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 删除资源
import requests

response = 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 应用代码:

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/posts', methods=['GET', 'POST'])
def handle_posts():
    if request.method == 'GET':
        # 返回所有帖子
        return jsonify({"posts": []})  # 返回一个空列表作为示例
    elif request.method == 'POST':
        data = request.json
        return 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.json
        return jsonify({"message": "Post updated", "data": data})
    elif request.method == 'DELETE':
        return jsonify({"message": "Post deleted"}), 204

if __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 编程的学习中获得乐趣,深入探索更多的网络编程知识!

精彩评论(0)

0 0 举报