通过程序实现文件下载,文件上传。

Posted yanhonghong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过程序实现文件下载,文件上传。相关的知识,希望对你有一定的参考价值。

大家好,今天聊一聊有关文件的下载个上传。

需求:通过busybox搭建一个文件站点,在站点上放一些文件,通过程序,将站点上的文件下载,然后上传到 https://pastebin.com上,必须是以用户身份上传。

分析:第一步:如何从文件站点拿到文件,第二步:怎样将文件以用户身份上传

关于如何利用busybox搭建文件站点请参考:https://blog.csdn.net/haofan_/article/details/78369352

下面请看代码:

from http import cookiejar
from urllib.parse import urlencode
from urllib.request import Request, urlopen,HTTPCookieProcessor,build_opener
from bs4 import BeautifulSoup

#文件下载函数
def file():
    url = "XXX" #文件的站点路由
    #请求头信息
    header_info = 
       "User-Agent":"XXXX", #用户代理
        "Authorization":"XXX" #验证信息,该字段可以可以根据站点是否需要验证,设置该字段,可以利用抓包工具拿到
        
    
    r = Request(url=url,headers=header_info) #实例化Request对象
    try:
        res = urlopen(r) #发送请求
        return res.read().decode() #拿到文件内容
    except Exception as e:
        print(e) #打印异常信息


#定义上传文件函数
def send_file(code):
    
    #模拟用户登录
    login_url = "https://pastebin.com/login"   #登录路由
    #登录表单数据
    form_data = 
        "submit_hidden":"submit_hidden",
        "user_name":"XXX",
        "user_password":"XXX",
        "submit":"Login"
    
    #构建请求头信息
    login_header = 
        "User-Agent":"XXX"   
    
        
    
    #cookie管理工具
    cj = cookiejar.CookieJar()
    handler = HTTPCookieProcessor(cj)
    opener = build_opener(handler)

    #利用opener发送请求 将携带cookie
    params = urlencode(form_data) #表单数据编码
    login_r = Request(login_url,data = params.encode(),headers=login_header) #实例化请求对象
    login_res = opener.open(login_r) #发送请求
    
    if login_res.url == "XXX": #通过url 判断用户登录是否成功
        #上传文件
        #获取上传文件页面的token
        token_url = "XXX",
        token_res = opener.open(token_url) #发送请求
        token_html = BeautifulSoup(token_res,lxml)
        token = str(token_html.select([name=csrf_token_post])[0]).split("value")[1][2:-3] #得到token

        #构建文件上传表单数据
        file_form_data = 
         "csrf_token_post": token,
         "submit_hidden": "submit_hidden",
         "paste_code": code,
         "paste_format": "1",
         "paste_expire_date": "N",
         "paste_private": "0",
         "paste_name": "my_code",   
        
        #构建请求头信息
        send_file_header = 
            "User-Agent":"XXX"
        
        send_file_url = "https://pastebin.com/post.php"
        send_params = urlencode(file_form_data)
        send_r = Request(send_file_url,data = send_params.encode(),headers=send_file_header)
        send_res = opener.open(send_r)
        
        if send_res.status == 200:
            print("上传成功!")
        else:
            print("上传失败!")
    else:
        print("登录失败!")


if __name__ =="__main__":
    
    
    text = get_file() #调用文件下载函数
    send_file(text) #调用上传文件函数

 

 

 

以上是关于通过程序实现文件下载,文件上传。的主要内容,如果未能解决你的问题,请参考以下文章

Java利用JSch实现sftp通过ssh上传下载删除文件及配置代码

Web上传文件的原理及实现

文件上传与下载

通过Google Drive API上传图片/文件

java实现文件上传

Java异步调用实现并发上传下载SMB共享文件