当前位置: 首页 > article >正文

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

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


http://www.kler.cn/news/315622.html

相关文章:

  • 实现人体模型可点击
  • Kotlin 枚举和 when 表达式(六)
  • 关于Python sklearn CountVectorizer使用详解
  • 多模态论文串讲-学习笔记(上)
  • docker配置镜像加速器
  • 亚马逊IP关联揭秘:发生ip关联如何处理
  • 【BEV 视图变换】Ray-based(2): 代码复现+画图解释 基于深度估计、bev_pool
  • MoveIt控制机械臂的运动实现——机器人抓取系统基础系列(二)
  • 带你0到1之QT编程:十七、Http协议实战,实现一个简单服务器和一个客户端进行http协议通信
  • 校园美食发现:Spring Boot技术的美食社交平台
  • Flyway 版本迁移文件
  • 【Kubernetes】常见面试题汇总(三十二)
  • Docker 系列完结
  • SparkSQL和Spark常用语句
  • Go语言并发编程:从理论到实践
  • QT widgets 窗口缩放,自适应窗口大小进行布局
  • 【鸿蒙OH-v5.0源码分析之 Linux Kernel 部分】003 - vmlinux.lds 链接脚本文件源码分析
  • 第k个排列 - 华为OD统一考试(E卷)
  • 跟着问题学12——GRU详解
  • Lucene详解介绍以及底层原理说明
  • 如何在Linux Centos7系统中挂载群晖共享文件夹
  • 心理辅导平台的构建:Spring Boot技术解析
  • 深度学习-从零基础快速入门到项目实践,这本书上市了!!!
  • 828华为云征文|部署知识库问答系统 MaxKB
  • 【文献阅读】基于原型的自适应方法增强未见到的构音障碍者的语音识别
  • 分布式消息中间件kafka
  • Google深度学习的图像生成大模型Imagen
  • Java接口和抽象类的区别
  • calibre-web报错:File type isn‘t allowed to be uploaded to this server
  • Ubuntu20.04配置NVIDIA+CUDA12.2+CUDNN【附所有下载资源】【亲测有效】【非常详细】