用POST请求在Linux之间传输文件(Python在Linux间传输文件)

背景

实际需求:

  • 已通过iperf和dd命令测试过两台不同区域之间的Linux服务器带宽,均为1000Mb网络。
  • 但发送post请求传输文件至对象存储时,总是卡在14Mb/s。
  • 除了排查区域之间的防火墙,也应该尝试检查Linux(KylinV10)之间是否存在默认系统配置限制了POST请求发送文件的带宽。
  • 因此:须在两台KylinV10之间直接通过POST请求发送文件,通过iftop监控网络带宽,排除操作系统对post带宽限制的可能。

解决:

  • A服务器上使用python编写server端程序,接收post请求,并将文件转存至文件目录。
  • B服务器上创建测试文件,通过post请求发送至A服务器。
  • 在A/B上运行iftop工具监控网络带宽、检查目标目录是否成功转存文件。

扩展:

  • 在禁用ssh和22端口的情况下,可通过rest接口在Linux之间传输大文件。

解决

1.安装python依赖库:flask和request

在A服务器上安装python程序需要的环境

dnf install python3
dnf install python3-pip
pip3 install requests -i https://mirrors.aliyun.com/pypi/simple/
pip3 install flask -i https://mirrors.aliyun.com/pypi/simple/

离线安装python和pip模块时,可下载我整理的rpm和whl压缩包(资源已上传,等待审核,需要区分不同操作系统版本),上传至Linux服务器解压后执行以下命令:
若有需要下载不同python版本(python3.6和3.7)对应的库,可使用以下命令:

pip3 download requests -i https://mirrors.aliyun.com/pypi/simple/
pip3 download flask -i https://mirrors.aliyun.com/pypi/simple/
#然后再打包至离线环境使用

离线安装python module模块的命令:

# 模块有依赖包的把所有包放在一个文件夹下,执行以下命令安装
pip install --no-index --find-link=./python-whl flask
##--no-index   不检查包索引中可用信息
##--find-links  从指定的目录下找离线包

KylinV10-SP2(sword)参考以下命令:

#使用本地repo源安装python
tar -zxvf czm-231108-KylinV10-PythonREST.tgz 
cp python-rpm/python.repo /etc/yum.repos.d/
sudo dnf install python3
sudo dnf install python3-pip
#pip安装本地whl模块
cd pip-module/
ll
total 1216
-rw-r--r-- 1 sysma sysma 158334 Nov  8 14:40 certifi-2023.7.22-py3-none-any.whl
-rw-r--r-- 1 sysma sysma 136822 Nov  8 14:40 charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
-rw-r--r-- 1 sysma sysma  97941 Nov  8 14:40 click-8.1.7-py3-none-any.whl
-rw-r--r-- 1 sysma sysma 101817 Nov  8 14:40 Flask-2.2.5-py3-none-any.whl
-rw-r--r-- 1 sysma sysma  61538 Nov  8 14:40 idna-3.4-py3-none-any.whl
-rw-r--r-- 1 sysma sysma  22934 Nov  8 14:40 importlib_metadata-6.7.0-py3-none-any.whl
-rw-r--r-- 1 sysma sysma  15749 Nov  8 14:40 itsdangerous-2.1.2-py3-none-any.whl
-rw-r--r-- 1 sysma sysma 133101 Nov  8 14:40 Jinja2-3.1.2-py3-none-any.whl
-rw-r--r-- 1 sysma sysma  25427 Nov  8 14:40 MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
-rw-r--r-- 1 sysma sysma  62574 Nov  8 14:39 requests-2.31.0-py3-none-any.whl
-rw-r--r-- 1 sysma sysma  33232 Nov  8 14:40 typing_extensions-4.7.1-py3-none-any.whl
-rw-r--r-- 1 sysma sysma 124213 Nov  8 14:40 urllib3-2.0.7-py3-none-any.whl
-rw-r--r-- 1 sysma sysma 233551 Nov  8 14:40 Werkzeug-2.2.3-py3-none-any.whl
-rw-r--r-- 1 sysma sysma   6758 Nov  8 14:40 zipp-3.15.0-py3-none-any.whlpip install --no-index --find-link=. flask

CentOS-7.6.1810参考以下命令:

#解压已准备好的repo本地文件包
tar -zxvf czm-231109-CentOS.pythonRest.tgz 
cd /home/sysma/czm-231109-CentOS.pythonRest/#复制repo文件到系统目录
cp CentOS-Python.repo /etc/yum.repos.d/#安装python3和pip3
yum install python3 -y#安装下载至本地的flask库
cd /home/sysma/czm-231109-CentOS.pythonRest/python-whl/
pip3 install --no-index --find-link=. flask

2.编写server端程序:接收post传输文件请求

在A服务器上创建python程序文件,直接复制后续代码,存储为xxx.py文件即可运行,此处我命名为01-PostReciveFile.py

具体程序代码如下:

from flask import Flask, requestapp = Flask(__name__)@app.route('/upload', methods=['POST'])		#指定接口名称为upload,指定请求方法为POST
def upload_file():if 'file' not in request.files:return 'No file part in the request', 400file = request.files['file']if file.filename == '':return 'No selected file', 400if file:file.save('/opt/' + file.filename)   #将接收的文件转存至/opt目录,可以改为任意目录,但要保证程序运行所属用户对目录有写权限。return 'File uploaded successfully', 200if __name__ == '__main__':app.run(host='0.0.0.0', port=5000)	#指定程序使用的端口,可改为其它任意非系统端口。

然后即可直接运行程序 python 01-PostReciveFile.py,示例如下:

[root@jenkins ~]# python 01-PostReciveFile.py * Serving Flask app '01-PostReciveFile'* Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.* Running on all addresses (0.0.0.0)* Running on http://127.0.0.1:5000* Running on http://10.42.40.27:5000
Press CTRL+C to quit

出现上述内容即表明程序已经启动,监听端口为5000,上传接口为/upload。

3.创建测试文件:dd创建文件

在B服务器上创建测试文件,执行dd命令即可。of指定了testfile-2GB.mp4是要创建的文件名,bs=1M表示每个块的大小为1MBcount=2048表示要创建2048个块,可根据需要创建不同大小的文件。示例如下

dd if=/dev/zero of=testfile-2GB.mp4 bs=1M count=2048	#创建一个2GB文件
dd if=/dev/zero of=testfile-100MB.mp4 bs=1M count=100	#创建一个100MB文件

4.发起post请求传输文件

file=@后填入将要传输的测试文件,带路径也行,然后发送请求到运行server端程序的A服务器:
此处我的A(server端)服务器是10.42.40.27

 curl -X POST -F "file=@testfile-100MB.mp4 " http://10.42.40.27:5000/upload

5.监控网络带宽,检查文件转存状态

kylinV10\RockyLinux9\CentOS7都没有默认安装iftop命令,使用默认安装包源,使用yumdnf都没办法直接安装的话,直接下载这个安装包【iftop-1.0-0.21.pre4.el7.x86-64.rpm】,然后执行rpm -ivh 即可,确认该安装包可在el7和el8上安装。

rpm -ivh iftop-1.0-0.21.pre4.el7.x86_64.rpm 
[root@localhost python-rpm]# rpm -ivh iftop-1.0-0.21.pre4.el7.x86_64.rpm 
警告:iftop-1.0-0.21.pre4.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID 352c64e5: NOKEY
Verifying...                          ################################# [100%]
准备中...                          ################################# [100%]
正在升级/安装...1:iftop-1.0-0.21.pre4.el7          ################################# [100%]
[root@localhost python-rpm]# 

在这里插入图片描述
在这里插入图片描述

结束

结论: post直接传输文件时,网络带宽没有限制。至少验证了KylinV10没有对POST请求带宽做限制。
进一步排查: 已确认2台不通区域Linux之间访问带宽低的问题原因是物理防火墙策略造成,已处理。

扩展

突然反应过除了测试,还有一个更好的使用场景:
在Linux的22端口被关闭、ssh协议被禁用的情况下,SCP命令无法使用的情况下,你可以通过REST接口指定其它TCP端口来传输文件了,朋友。

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

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

相关文章

linux的美化工具 oh-my-zsh的安装与使用 神器工具

目录 1 安装zsh的环境2 安装 Oh My Zsh3 主题设置重新启动终端:关闭连接 在重新链接一下附加 -插件管理案例讲解看效果 Oh My Zsh 是一款基于 Zsh 的开源命令行工具,它提供了丰富的主题和插件,可以帮助用户更加高效地使用终端。本文将详细介绍 Oh My Zsh…

Java 设计模式——访问者模式

目录 1.概述2.结构3.案例实现3.1.抽象访问者类3.2.抽象元素类3.3.具体元素类3.4.具体访问者类3.5.对象结构类3.6.测试 4.优缺点5.使用场景6.扩展6.1.分派6.2.动态分配6.3.静态分配6.4.双分派 1.概述 访问者模式 (Visitor Pattern) 是一种行为型设计模式,它用于将数…

springboot本地启动多个模块报错:Address already in use: JVM_Bind

目录 背景解决方法 背景 环境: jdk1.8 idea 2019.2.4idea本地启动多个模块联调时,提示报错: 错误: 代理抛出异常错误: java.rmi.server.ExportException: Port already in use: 9090; nested exception is: java.net.BindException: Addre…

vue+java实现语音转文字思路

思路: 前端录音生成wav文件后端去解析 技术: 后端: Vosk是一个离线开源语音识别工具。它可以识别16种语言,包括中文。 API接口,让您可以只用几行代码,即可迅速免费调用、体验功能。 目前支持 WAV声音文件…

基于8086家具门安全控制系统设计

**单片机设计介绍,基于8086家具门安全控制系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 # 8086家具门安全控制系统设计介绍 8086家具门安全控制系统是一种用于保护家具和保证室内安全的系统。该系统基于808…

小程序游戏对接广告收益微信小游戏抖音游戏软件

小程序游戏对接广告是一种常见的游戏开发模式,开发者可以通过在游戏中嵌入广告来获取收益。以下是一些与小程序游戏对接广告收益相关的关键信息: 小程序游戏广告平台选择: 选择适合你的小程序游戏的广告平台非常重要。不同的平台提供不同类型…

ubuntu18-recvfrom接收不到广播报文异常分析

目录 前言 一、UDP广播接收程序 二、异常原因分析 总结 前言 在ubuntu18.04系统中,编写udp接收程序发现接收不到广播报文,使用抓包工具tcpdump可以抓取到广播报文,在此对该现象分析解析如下文所示。 一、UDP广播接收程序 UDP广播接收程序如…

【解决方案】vue 项目 npm run dev 时报错:‘cross-env‘ 不是内部或外部命令,也不是可运行的程序

报错 cross-env 不是内部或外部命令,也不是可运行的程序 或批处理文件。 npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! estate1.0.0 dev: cross-env webpack-dev-server --inline --progress --config build/webpack.dev.conf.js npm ERR! Exit status 1 np…

Go语言用Colly库编写的图像爬虫程序

下面是一个使用Colly库编写的Go语言图像爬虫程序,该程序会爬取news.qq上的图片,并使用proxy_host:duoip和proxy_port:8000的爬虫IP服务器进行抓取。 package mainimport ("fmt""net/http""github.com/crawlab-collective/go-co…

21 移动网络的前世今生

1、移动网络的发展历程 发展过程就是:2G,3G,4G,5G的过程,用2G看txt,用3G看jpg,用4G看avi。 2、2G网络 手机本来是用来打电话的,不是用来上网的,所以原来在2G时代,上网使用的不是IP网络&#…

论文阅读——What Can Human Sketches Do for Object Detection?(cvpr2023)

论文:https://openaccess.thecvf.com/content/CVPR2023/papers/Chowdhury_What_Can_Human_Sketches_Do_for_Object_Detection_CVPR_2023_paper.pdf 代码:What Can Human Sketches Do for Object Detection? (pinakinathc.me) 一、 Baseline SBIR Fram…

【Qt之QAssociativeIterable】使用

介绍 QAssociativeIterable类是QVariant中一个关联式容器的可迭代接口。这个类允许多种访问在QVariant中保存的关联式容器元素的方法。如果一个QVariant可以转换为QVariantHash或QVariantMap&#xff0c;那么QAssociativeIterable的实例可以从中提取出来。 QHash<int, QSt…

UPLOAD-LABS1

less1 (js验证) 我们上传PHP的发现不可以&#xff0c;只能是jpg&#xff0c;png&#xff0c;gif&#xff08;白名单限制了&#xff09; 我们可以直接去修改限制 在查看器中看到使用了onsubmit这个函数&#xff0c;触发了鼠标的单击事件&#xff0c;在表单提交后马上调用了re…

css排版—— 一篇优雅的文章(中英文) vs 聊天框的特别排版

文章 <div class"contentBox"><p>这是一篇范文——仅供测试使用</p><p>With the coming of national day, I have a one week holiday. I reallyexpect to it, because it want to have a short trip during these days. Iwill travel to Ji…

osgEarth之添加shp

目录 效果 代码 代码分析 加载模式 效果 代码 #include "stdafx.h" #include <osg/Notify> #include <osgGA/StateSetManipulator> #include <osgViewer/Viewer> #include <osgViewer/ViewerEventHandlers>#include <osgEarth/MapNo…

蓝桥杯练习

即约分数 题目 思路 遍历所有的x&#xff0c;y&#xff0c;判断x/y是不是即越约分数。 代码 #include <iostream> using namespace std; int gcd(int x,int y) {int r;while(y!0){rx%y;xy;yr;}return x; } int main() {// 请在此输入您的代码int sum4039;//1/y和x/1都…

火爆全网!用 Pyecharts 就能做出来“迁徙图“和“轮播图“

1.pyecharts知识点回顾 1&#xff09;知识回顾 前面我们已经讲述了&#xff0c;如何使用pyecharts进行图形的绘制&#xff0c;一共涉及到如下四步。我们今天就是按照下面这几步来进行迁徙图和轮播图的绘制。 ① 选择图表类型&#xff1b; ② 声明图形类并添加数据&#xff1…

学术论文的实证数据来源

一、引言 在当今的学术研究中&#xff0c;数据是至关重要的。无论是自然科学、社会科学还是人文科学&#xff0c;都需要借助数据来支撑和证明其研究假设和理论。然而&#xff0c;数据的来源却是多种多样的&#xff0c;而且不同的学科领域也有其特定的数据来源。本文旨在探讨论文…

开放智慧,助力学习——电大搜题,打开学无止境的新篇章

随着信息技术的迅猛发展&#xff0c;学习已经不再受时间和空间的限制。电大搜题微信公众号为广播电视大学和河南开放大学的学子们带来了便利和智慧&#xff0c;让学习变得更加高效和愉快。 电大搜题微信公众号作为一款专为电大学生而设计的学习助手&#xff0c;是学习中不可或…

【2】Spring Boot 3 项目搭建

目录 【2】Spring Boot 3 初始项目搭建项目生成1. 使用IDEA商业版创建2. 使用官方start脚手架创建 配置与启动Git版本控制 个人主页: 【⭐️个人主页】 需要您的【&#x1f496; 点赞关注】支持 &#x1f4af; 【2】Spring Boot 3 初始项目搭建 项目生成 1. 使用IDEA商业版创…