标题有点长。这个程序是用Python的Django框架制作的。功能是:盛大网盘(15G免费空间,文件大小不限制)分享文件直接下载接口。
为什么要做这个接口呢?
看一个盛大网盘分享文件的链接:http://www.everbox.com/f/BB8Y1QZiTHAGqJmIb8J45nClfz,要想下载文件需要点击那个“下载按钮”。
由于我需要经常给国外朋友分享一些商业数据文件,如果直接给他们上面的链接,一方面会显得不正式,另外关键是下载不方便(完全不懂中文的,可能就杯具了)。
于是就想实现这样一个中转接口:打开链接就直接开始下载文件了,用户不用再做任何的操作。
分析了一下下载按钮的动作,过程挺简单的:
它从页面meta标签中读取csrf-token值,然后将该值作为POST Entity提交给"/f/download/" + linkid(linkid即BB8Y1QZiTHAGqJmIb8J45nClfz)。服务端返回的数据中就包含了文件的直接下载地址。
要注意的是,服务端会验证Cookie。要先访问下载链接获取到验证Cookie,然后带着这个Cookie再向http://www.everbox.com/f/download/BB8Y1QZiTHAGqJmIb8J45nClfz 发送请求,否则服务器将会返回空数据。
看一下效果:
http://django.redicecn.com/everbox/BB8Y1QZiTHAGqJmIb8J45nClfz (点击该链接,文件下载直接开始)
希望盛大不要给下载文件这里增加验证码,不然就杯具了。
下面是实现代码:
如果对该程序感兴趣,可以Email获取完整的项目。redice@163.com。也欢迎广大Python爱好者加入我们的QQ群(Pythoner):103441184
# coding: utf-8 # views.py # by redice 2011.06.04 import cookielib from django.http import HttpResponse, HttpResponseRedirect import download as D import re import urllib import urllib2 import xpath def everbox(request, linkid): everbox_link = 'http://www.everbox.com/f/%s' % linkid opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.MozillaCookieJar())) html = D.get(everbox_link, opener=opener) if html: token = xpath.get(html, '//meta[@name="csrf-token"]/@content') post_data = 'authenticity_token=%s' % urllib.quote(token) html = D.get('http://www.everbox.com/f/download/%s' % linkid, data=post_data, opener=opener) if html: m = re.compile(r'"dataurl":"([^"]+)"').search(html) if m: final_url = m.groups()[0].strip() return HttpResponseRedirect(final_url) return HttpResponse('Can not get the final link of %s' % everbox_link)
呵呵,谢谢
VaTG790i.最好的<a href=http://www.kyfei.com>网站推广软件</a>,
非常好
....................
;ui;普i;uighur;ui;ui;个
在unix网络编程中看到了关于TCP/IP的一些内容,我感觉还是写的不够。正在下载中,一定
下载地址呢