码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2019-10-03 14:37:57      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:函数   blog   sub   bs4   文件的   cookie   headers   div   一个   

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

需求:通过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) #调用上传文件函数

 

 

 

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

标签:函数   blog   sub   bs4   文件的   cookie   headers   div   一个   

原文地址:https://www.cnblogs.com/yanhonghong/p/11619555.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!