在 Python 中向 HTTP 界面发送数据,本质上是模拟用户在网页上填写表单、点击提交按钮的过程。这在自动化测试、数据上报、接口调用等场景中非常常用。下面用通俗易懂的方式介绍具体方法、实例代码和解析。

核心原理

网页上的数据发送(比如提交表单)本质是通过 HTTP 协议 向服务器发送请求。常见的请求方式有两种:

  • GET:数据通过 URL 传递(比如http://xxx.com?name=abc&age=18),适合简单、少量数据。
  • POST:数据放在请求体内,不显示在 URL 中,适合敏感数据(如密码)或大量数据。

Python 中最常用的工具是 requests 库,它能轻松模拟这两种请求方式。

准备工作

首先安装 requests 库(如果还没安装):

pip install requests

方法一:用 GET 方式发送数据

GET 方式将数据附加在 URL 的末尾,格式为 ?key1=value1&key2=value2。适合发送非敏感的简单数据。

实例:向接口发送用户 ID 和操作指令

假设要向 http://example.com/operate 发送两个数据:

  • user_id:用户 ID(比如 123)
  • action:操作指令(比如 "start")

代码实现

import requests# 目标URL
url = "http://example.com/operate"# 要发送的数据(字典形式,key是参数名,value是参数值)
data = {"user_id": 123,"action": "start"
}# 用GET方式发送数据(requests会自动把data拼到URL后面)
response = requests.get(url, params=data)# 打印服务器返回的结果
print("服务器响应状态码:", response.status_code)  # 200表示成功
print("服务器返回内容:", response.text)

代码解析

  1. url 是接收数据的服务器地址。
  2. data 是一个字典,键(user_idaction)对应网页上输入框的name属性,值是要发送的内容。
  3. requests.get(url, params=data):发送 GET 请求,params参数会自动将data转换为 URL 参数(最终请求的 URL 会变成 http://example.com/operate?user_id=123&action=start)。
  4. response.status_code:服务器返回的状态码(200 表示成功,404 表示地址不存在等)。
  5. response.text:服务器返回的具体内容(通常是网页 HTML 或 JSON 数据)。

方法二:用 POST 方式发送数据

POST 方式将数据放在请求体内,不会显示在 URL 中,更安全。适合发送密码、表单等敏感或复杂数据。

场景 1:发送表单数据(最常用)

模拟用户在登录页面输入用户名和密码,点击 "登录" 按钮的操作。

代码实现

import requests# 登录接口URL
login_url = "http://example.com/login"# 要发送的表单数据(对应网页上的输入框)
form_data = {"username": "myuser",  # 用户名输入框的name是"username""password": "mypass123",  # 密码输入框的name是"password""remember_me": "on"  # 记住登录的复选框,name是"remember_me"
}# 用POST方式发送表单数据
response = requests.post(login_url, data=form_data)# 处理响应
if response.status_code == 200:print("登录请求发送成功!")if "登录成功" in response.text:print("登录成功!")else:print("登录失败,返回内容:", response.text)
else:print("请求失败,状态码:", response.status_code)

代码解析

  1. form_data 字典中的键必须和网页表单中输入框的name属性一致(比如用户名输入框<input name="username">,对应键就是 "username")。
  2. requests.post(login_url, data=form_data):发送 POST 请求,data参数会将表单数据放在请求体内发送。
  3. 通过判断响应内容中的关键词(如 "登录成功"),可以确认服务器是否正确处理了数据。
场景 2:发送 JSON 数据(API 接口常用)

现在很多接口要求发送 JSON 格式的数据(比如前后端分离的网站),需要用json参数而不是data

代码实现

import requests# API接口URL
api_url = "http://example.com/api/user"# 要发送的JSON数据
json_data = {"name": "张三","age": 25,"hobbies": ["篮球", "编程"]
}# 用POST发送JSON数据(指定json参数)
response = requests.post(api_url, json=json_data)# 解析服务器返回的JSON响应
if response.status_code == 200:result = response.json()  # 自动将JSON响应转为字典print("服务器返回的结果:", result)
else:print("请求失败,状态码:", response.status_code)

代码解析

  1. json_data 是一个字典,会被自动转换为 JSON 格式发送(等价于json.dumps(json_data))。
  2. response.json():如果服务器返回的是 JSON 格式,这个方法可以直接将其转换为 Python 字典,方便处理。
  3. 这种方式适合调用 RESTful API(比如后端接口、第三方服务)。

方法三:带请求头(Headers)发送数据

有些网站会检查请求头(Headers),如果发现是程序发送的请求会拒绝。这时需要模拟浏览器的请求头。

实例:模拟浏览器发送数据

import requestsurl = "http://example.com/data"# 要发送的数据
data = {"content": "这是一条模拟浏览器发送的数据"}# 模拟浏览器的请求头(关键是User-Agent,告诉服务器这是浏览器)
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36","Content-Type": "application/x-www-form-urlencoded"  # 表单数据类型
}# 带请求头发送POST请求
response = requests.post(url, data=data, headers=headers)print("响应内容:", response.text)

代码解析

  • headers 字典中的User-Agent字段模拟了 Chrome 浏览器的标识,避免服务器识别出这是 Python 程序发送的请求。
  • Content-Type 说明数据类型,表单数据一般用application/x-www-form-urlencoded,JSON 数据用application/json(用json参数时会自动设置)。

方法四:处理 Cookie 和会话(保持登录状态)

有些操作需要先登录(比如购物网站下单),这时候需要保持会话(Session),让服务器记住我们的登录状态。

实例:登录后保持会话发送数据

import requests# 创建一个会话对象(自动处理Cookie,保持登录状态)
session = requests.Session()# 1. 先登录
login_url = "http://example.com/login"
login_data = {"username": "myuser", "password": "mypass123"}
session.post(login_url, data=login_data)  # 登录请求会自动保存Cookie# 2. 登录后发送数据(比如提交订单)
order_url = "http://example.com/order"
order_data = {"product_id": 456, "quantity": 2}
response = session.post(order_url, data=order_data)  # 会话会自动携带Cookieprint("提交订单结果:", response.text)

代码解析

  • requests.Session() 创建一个会话对象,它会自动保存服务器返回的 Cookie(登录凭证)。
  • session.post()代替requests.post(),后续请求会自动携带 Cookie,实现 "一次登录,多次操作",模拟用户在浏览器中保持登录的状态。

常见问题解决

  1. 数据发送成功但服务器返回错误
    检查数据的键是否和网页表单的name一致,或者是否遗漏了必填字段(比如验证码,不过验证码需要额外处理)。

  2. 请求被拒绝(403 错误)
    可能是服务器检测到非浏览器请求,添加User-Agent请求头试试。

  3. 中文乱码
    服务器返回内容乱码时,尝试指定编码:response.encoding = "utf-8"

总结

向 HTTP 界面发送数据的核心是:

  1. 确定目标 URL(数据接收地址)。
  2. 准备要发送的数据(字典形式,键对应网页表单的name)。
  3. 根据场景选择 GET(简单数据)或 POST(敏感 / 复杂数据)。
  4. requests库发送请求,处理服务器响应。

掌握这些方法后,就可以用 Python 自动化处理各种网页数据交互了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/91102.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/91102.shtml
英文地址,请注明出处:http://en.pswp.cn/web/91102.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mybatis-plus由mysql改成达梦数据库

前置条件: 达梦数据库设置了大小写敏感,我比较菜,改不动!先这么凑合着用吧; 因为设置了大小写敏感,所以所有的sql语句都要加 引号; 这样是会报错的: SELECT remark,createDept,createBy,createTime,updateBy,updateTime FROM sys_oss_config这样才可以 SELECT "create_…

设计模式:外观模式 Facade

目录前言问题解决方案结构代码前言 外观是一种结构型设计模式&#xff0c;能为程序库、框架或其他复杂类提供一个简单的接口。 问题 假设你必须在代码中使用某个复杂的库或框架中的众多对象。正常情况下&#xff0c; 你需要负责所有对象的初始化工作、 管理其依赖关系并按正确…

【数据结构初阶】--二叉树(四)

&#x1f525;个人主页&#xff1a;草莓熊Lotso &#x1f3ac;作者简介&#xff1a;C研发方向学习者 &#x1f4d6;个人专栏&#xff1a; 《C语言》 《数据结构与算法》《C语言刷题集》《Leetcode刷题指南》 ⭐️人生格言&#xff1a;生活是默默的坚持&#xff0c;毅力是永久的…

三、平面度检测-差值法

方法一: dev_get_window (WindowHandle) *读取3通道彩色融合图 read_image (Image, ./XYZ彩色融合图.tiff) *拆分3个通道 decompose3 (Image, x, y, z) *将3个通道图像转换为3D模型 xyz_to_object_model_3d (x,y, z, ObjectModel3D) *显示动态3D模型 threshold (z, Regions,…

什么是数据编排?数据编排的流程、优势、挑战及工具有哪些?

目录 一、数据编排的定义与概念 1.数据编排的基本含义 2.数据编排与相关概念的区别 3.数据编排的重要性 二、数据编排的流程 1.需求分析&#xff1a; 2.数据源识别与连接&#xff1a; 3.数据抽取&#xff1a; 4.数据转换&#xff1a; 5.数据加载&#xff1a; 6.监控…

【C++算法】82.BFS解决FloodFill算法_被围绕的区域

文章目录题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;题目链接&#xff1a; 130. 被围绕的区域 题目描述&#xff1a; 解法 BFS一层层剥开。 C 算法代码&#xff1a; class Solution {// 定义四个方向的偏移量&#xff1a;右、左、下、上int dx[4] …

商汤发布具身智能平台,让机器人像人一样和现实世界交互

7月27日&#xff0c;在“大爱无疆模塑未来”WAIC 2025大模型论坛上&#xff0c;商汤科技重磅发布「悟能」具身智能平台。「悟能」具身智能平台以商汤具身世界模型为核心引擎&#xff0c;依托商汤大装置提供端侧和云侧算力支持&#xff0c;能够为机器人、智能设备提供强大的感知…

MCP工作原理

在谈MCP原理前&#xff0c;我们先谈谈MCP的技术前身—Function Calling。1.Function Calling技术在FunctionCalling技术出现之前&#xff0c;大语言模型虽然拥有强大的知识储备和语言理解能力&#xff0c;但是只能提供自身数据库已有的信息&#xff0c;无法和外界进行信息交互。…

VSCode手动版本更新

技术背景 使用VSCode的的过程中&#xff0c;如果打开了自动更新功能&#xff0c;每隔一段时间就会有更新提示。为了保持版本的稳定性&#xff0c;我们可以在设置中将Update: Mode设置为none&#xff0c;这样就不会触发自动更新。但有时又有版本更新的需求&#xff0c;可能是版本…

医疗超声成像专用AFE模拟前端

医疗超声成像作为一种广泛应用于临床诊断的重要技术&#xff0c;对于提供清晰、准确的医学图像起着关键作用。在超声成像系统中&#xff0c;AFE模拟前端扮演着至关重要的角色。它负责对超声换能器接收到的微弱电信号进行处理和转换&#xff0c;为后续的数字信号处理提供高质量的…

机器学习之线性回归——小白教学

一、线性回归简介1.什么是线性回归线性回归(Linear regression)是利⽤回归⽅程(函数)对⼀个或多个⾃变量(特征值)和因变量(⽬标值)之间关系进⾏建模的⼀种分析⽅式。特点&#xff1a;只有⼀个⾃变量的情况称为单变量回归&#xff0c;多于⼀个⾃变量情况的叫做多元回归线性回…

.NET 10 中的新增功能系列文章1——运行时中的新增功能

引言 随着 .NET 10 预览版6的发布&#xff0c;微软在运行时层面带来了一系列重要的性能改进和新功能。这些改进主要集中在JIT编译器优化、硬件指令集支持、内存管理等方面&#xff0c;旨在进一步提升应用程序的执行效率和资源利用率。本文将详细解析这些运行时增强功能&#x…

安宝特方案丨AI算法能力开放平台:适用于人工装配质检、点检、实操培训

当前工业AI图形识别算法的应用存在投入成本高、维护更新难、依赖固定相机、应用范围窄、与实际作业脱节等问题。 针对以上情况&#xff0c;安宝特提出了“AI算法能力开放平台”&#xff0c;目的是让AI图形识别算法可以与现场实际的人工点检作业、装配作业、质检作业、培训作业…

水下目标识别准确率↑89%!陌讯多模态融合算法在智慧水务的落地实践

一、行业痛点&#xff1a;智慧水务的检测困境据《2024城市水务智能化白皮书》统计&#xff0c;传统水务检测面临三大挑战&#xff1a;​​水体干扰​​&#xff1a;浑浊度>100NTU时&#xff0c;目标漏检率高达65%​​动态环境​​&#xff1a;水流扰动导致目标形变&#xff…

手动开发一个串口调试工具(三):基于 Qt Widgets 搭建串口调试界面

在上一篇中&#xff0c;我们通过 QCoreApplication 构建了一个基础的串口收发控制台程序&#xff0c;并实现了周期发送、十六进制转换和数据读取等核心功能。本篇将基于此逻辑&#xff0c;进一步将其封装为一个图形化界面程序&#xff0c;借助 Qt Widgets 提供的控件搭建完整的…

量子计算革命:重新定义计算的边界与未来

引言&#xff1a;我们正站在计算革命的新起点 当IBM在2019年宣布实现"量子霸权"时&#xff0c;很多人认为这只是实验室里的科学突破。然而&#xff0c;短短几年后&#xff0c;量子计算已经从理论走向实践&#xff0c;从实验室走向产业应用。我们正站在一个全新的计算…

Python 数据可视化之 Matplotlib 库

在当今数据驱动的时代&#xff0c;数据可视化&#xff08;Data Visualization&#xff09;已成为数据科学、机器学习、金融分析、工程建模等多个领域中不可或缺的一环。数据可视化不仅帮助我们更直观地理解数据的分布和趋势&#xff0c;还能辅助决策、展示研究成果以及增强数据…

Makefile 快速入门指南

Makefile 快速入门指南 什么是Makefile? Makefile 是一个自动化构建工具的配置文件&#xff0c;用于管理代码编译、测试和清理等任务。它通过定义规则&#xff08;rules&#xff09;来指定文件之间的依赖关系&#xff0c;当源文件改变时&#xff0c;只重新编译受影响的部分&…

Linux学习--C语言(指针4、结构体)

1.二维数组的传参int a[2][3] {1, 2, 3, 4, 5, 6};fun(a,2); int fun(int (*p)[3], int len);2.指针数组的传参char *pastr[5] {NULL};int fun(char **pstr,int len);例子&#xff1a;#include <stdio.h> #include <string.h>int InputArray(char (*p)[32], int …

【STM32】FreeRTOS 消息队列(五)

在 FreeRTOS 中&#xff0c;任务消息队列&#xff08;Message Queue&#xff09; 是一种非常关键的通信机制&#xff0c;用于在任务之间 传递数据、同步事件。 它是实现任务 解耦、异步通信 的核心工具之一&#xff0c;FreeRTOS 的消息队列是任务之间通信的桥梁。 简单点说&am…