Python(35):Python3 通过https上传文件和下载文件

Python(35):Python3 通过https上传文件和下载文件

Python http方式的下载,参考:https://blog.csdn.net/fen_fen/article/details/113753983

https需要先安装需要的模块

1、上传示例

1.1、调用:

upload_strategy(access_token,"123456789")

1.2、上传代码

global pkcs12_filename, pkcs12_password
pkcs12_filename = './conf/xxx-client-cert-xxx.p12'
pkcs12_password = 'xxx'
self.host=10.1.1.101



# 上传文件
    def upload_file(self, access_token,appid):
        #warnings.simplefilter('ignore', ResourceWarning)
        # filepath = os.getcwd()
        # print(filepath)
        # print(filepath+"\data\\"+fileName)
        try:
            header_up = {"Authorization": "Bearer " + access_token}
            file=open("./data/"+fileName, "rb")
            files={"file": file}
            #files = {"file": open("./data/"+fileName, "rb")}
            url = "https://"+self.host+"/xxx/v1/xxx/strategy/xxx?appId="+appid

            api_json = base_request.upload_request(url, header_up, files)
            if api_json["code"] == 0:
                print(">>上传策略成功。")
            else:
                print(">>上传策略失败,", api_json)
            file.close()
            return api_json
        except Exception as e:
            print(">>上传策略失败,Exception:", e)

# 基础请求:上传
def upload_request(url, headers, files):
    response = requests_pkcs12.post(url, headers=headers, files=files,
                                    pkcs12_filename=pkcs12_filename,
                                    pkcs12_password=pkcs12_password, verify=False)
    api_json = response.json()  # 获取请求返回实际结果的json串值
    return api_json

2、下载示例

 2.1、下载调用:

   self.host=10.1.1.101
 
    # 下载客户端
    def download_client(self, header_all):
        try:
            url = "https://" + self.host + "/xxx/v1/xxx/download-client"
            getfile = Getfile(url, header_all)
            filename = getfile.getfilename()
            #print(filename)
            if filename:
                getfile.download(filename)

        except Exception as e:
            print(">>下载客户端失败,Exception: ", e)


header_all = {"Content-Type": "application/json;charset=UTF-8"}
header_all['Authorization'] = "Bearer " + access_token
download_client(header_all)


2.2、Python3 https下载文件工具类:

# -*- coding: utf-8 -*-

"""
Create by HMF on 2024/01/11.
"""
import re,time
import requests
import requests_pkcs12

class Getfile(object):  # 下载文件
    global pkcs12_filename, pkcs12_password
    pkcs12_filename = './conf/xxx-client-cert-xxx.p12'
    pkcs12_password = 'xxx'

    def __init__(self, url, headers):
        self.url = url
        self.headers = headers

    def getheaders(self):
        try:
            #r = requests_pkcs12.head(self.url, headers=self.headers, verify=False)
            r = requests_pkcs12.head(self.url, headers=self.headers, pkcs12_filename=pkcs12_filename, pkcs12_password=pkcs12_password, verify=False)
            rs_headers = r.headers
            return rs_headers
        except Exception as e:
            print(e)

    # 获取默认下载文件名
    def getfilename(self):
        try:
            if 'Content-Disposition' in self.getheaders():
                file = self.getheaders().get('Content-Disposition')
                # filename = re.findall('filename="(.*)"',file)
                filename = re.split("=", file)[1]
                if filename:
                    print("下载文件名:" + filename)
                    return filename
            else:
                print("下载文件失败")
        except Exception as e:
            print(e)

    # 下载文件
    def download(self, filename): 
        try:
            #self.r = requests_pkcs12.get(self.url, headers=self.headers, stream=True, verify=False)
            self.r =requests_pkcs12.get(self.url, headers=self.headers,pkcs12_filename=pkcs12_filename,
                                 pkcs12_password=pkcs12_password, stream=True,  verify=False)

            with open(filename, "wb") as code:
                # 边下载边存硬盘
                for chunk in self.r.iter_content(chunk_size=1024): 
                    if chunk:
                        code.write(chunk)
            time.sleep(1)
        except Exception as e:
            print(e)


  • 29
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
实现远程控制功能需要先建立服务器和客户端之间的连接,可以使用Python的socket模块实现。下面是一个简单的脚本示例,实现了命令执行、文件上传文件下载三项功能。 服务端代码: ```python import socket import subprocess import os SERVER_HOST = '0.0.0.0' SERVER_PORT = 9999 BUFFER_SIZE = 4096 def execute_command(command): try: output = subprocess.check_output(command, shell=True) except Exception as e: output = str(e).encode() return output def send_file(conn, file_path): with open(file_path, 'rb') as f: data = f.read(BUFFER_SIZE) while data: conn.send(data) data = f.read(BUFFER_SIZE) def receive_file(conn, file_path): with open(file_path, 'wb') as f: data = conn.recv(BUFFER_SIZE) while data: f.write(data) data = conn.recv(BUFFER_SIZE) def handle_connection(conn, addr): print(f'[*] New connection from {addr[0]}:{addr[1]}') while True: data = conn.recv(BUFFER_SIZE) if not data: break command = data.decode().strip() if command.startswith('cd'): os.chdir(command[3:]) output = b'' elif command.startswith('upload'): file_path = command[7:] receive_file(conn, file_path) output = b'File uploaded successfully' elif command.startswith('download'): file_path = command[9:] send_file(conn, file_path) output = b'' else: output = execute_command(command) conn.send(output) conn.close() def main(): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((SERVER_HOST, SERVER_PORT)) s.listen(5) print(f'[*] Listening on {SERVER_HOST}:{SERVER_PORT}') while True: conn, addr = s.accept() handle_connection(conn, addr) if __name__ == '__main__': main() ``` 客户端代码: ```python import socket import os SERVER_HOST = '127.0.0.1' SERVER_PORT = 9999 BUFFER_SIZE = 4096 def execute_command(command): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((SERVER_HOST, SERVER_PORT)) s.send(command.encode()) output = b'' data = s.recv(BUFFER_SIZE) while data: output += data data = s.recv(BUFFER_SIZE) s.close() return output.decode() def send_file(file_path): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((SERVER_HOST, SERVER_PORT)) s.send(f'upload {file_path}'.encode()) with open(file_path, 'rb') as f: data = f.read(BUFFER_SIZE) while data: s.send(data) data = f.read(BUFFER_SIZE) s.close() def receive_file(file_path): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((SERVER_HOST, SERVER_PORT)) s.send(f'download {file_path}'.encode()) with open(file_path, 'wb') as f: data = s.recv(BUFFER_SIZE) while data: f.write(data) data = s.recv(BUFFER_SIZE) s.close() def main(): while True: command = input('> ') if command == 'exit': break elif command.startswith('upload'): file_path = command[7:] if os.path.exists(file_path): send_file(file_path) print('File uploaded successfully') else: print(f'{file_path} does not exist') elif command.startswith('download'): file_path = command[9:] receive_file(file_path) print('File downloaded successfully') else: output = execute_command(command) print(output) if __name__ == '__main__': main() ``` 使用方法: 1. 在服务端计算机上运行服务端脚本 2. 在客户端计算机上运行客户端脚本,并输入服务端计算机的IP地址和端口号 3. 在客户端上输入命令,可以执行远程命令、上传文件下载文件。例如,执行`ls`命令,上传`test.txt`文件下载`example.txt`文件等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宁宁可可

您的鼓励是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值