本篇文章主要破解referer防盗链技术
referer防盗链技术:
referer防盗链技术是服务器通过检查客户端提起的请求包内的referer字段来阻止图片下载的,如果referer字段错误,服务器会跳到另一个地址,这将导致错误的图片下载。
上面已经了解到了referer防盗链技术,下面直接上代码。
(我用的是python3,需要用到requests,html非系统包
下载方法:用python中的pip下载即可)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
import urllib.request import requests import time import os import shutil from lxml import html def getPage(): ''''' 从网站首页获取妹子的网址 ''' fres = open ( 'res.txt' , 'w' ) htm = urllib.request.urlopen( 'http://www.mzitu.com/' ) out = htm.read() out = html.fromstring(out) urls = [] for res in out.xpath( '//ul[@id="pins"]/li/a/@href' ): urls.append(res) for r in urls: fres.write(r) fres.write( '\n\r' ) fres.close() return urls def getPiclink(url): ''''' 获取一个妹子的标题和她的所有图片地址 ''' i_headers = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0' } sel = urllib.request.Request(url, headers = i_headers) #使用代理浏览器访问网站 sel.add_header( 'Referer' , 'http://www.mzitu.com/' ) #将referer字段添加到请求包里 sel = urllib.request.urlopen(sel).read() sel = html.fromstring(sel) total = sel.xpath( '//div[@class="pagenavi"]/a[last()-1]/span/text()' )[ 0 ] title = sel.xpath( '//h2[@class="main-title"]/text()' )[ 0 ] jpglist = [] for i in range ( int (total)): link = '{}/{}' . format (url, i + 1 ) s = html.fromstring(urllib.request.urlopen(link).read()) jpg = s.xpath( '//div[@class="main-image"]/p/a/img/@src' )[ 0 ] jpglist.append(jpg) return title,jpglist def downloadJpg(title,piclist,link): ''''' 下载getPiclink()获取到的妹子的图片 ''' k = 1 count = len (piclist) dirname = u "[%sP]%s" % ( str (count),title) if os.path.exists(dirname): shutil.rmtree(dirname) os.mkdir(dirname) i_header = {} i_header[ 'Referer' ] = link #将getPiclink()获取到的妹子的首页网址作为referer字段的值 for i in piclist: filename = '%s/%s/%s.jpg' % (os.path.abspath( '.' ),dirname, k) with open (filename, 'wb' ) as jpg: jpg.write(requests.get(i, headers = i_header).content) #将referer字段添加到请求包里并下载图片 time.sleep( 0.5 ) k + = 1 if __name__ = = '__main__' : for link in getPage(): title,pic = getPiclink(link) downloadJpg(title,pic,link) print ( 'OK!' ) |
另外给大家推荐一个很好的抓包工具wireshark,我就是通过wirshark抓包分析后得到的referer信息。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://blog.csdn.net/qq_34748223/article/details/78385426