通过程序实现文件下载,文件上传。
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) #调用上传文件函数
以上是关于通过程序实现文件下载,文件上传。的主要内容,如果未能解决你的问题,请参考以下文章