本篇文章主要破解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