if include_headers:
include_headers = tuple(to_bytes(h.lower())
for h in sorted(include_headers))
cache = _fingerprint_cache.setdefault(request, {})
if include_headers not in cache:
fp = hashlib.sha1()
fp.update(to_bytes(request.method))
fp.update(to_bytes(canonicalize_url(request.url)))
fp.update(request.body or b'')
if include_headers:
for hdr in include_headers:
if hdr in request.headers:
fp.update(hdr)
for v in request.headers.getlist(hdr):
fp.update(v)
cache[include_headers] = fp.hexdigest()
return cache[include_headers]
第一步:在调用该函数的时候,只传来一个request, 建立一个字典的弱引用
第二步:运用sha1加密, 将请求方法(get, post) 转为为字节,再调用update方法,
第三步:运用canonicalize_url函数,将url进行格式化,具体这个函数是做什么的。可以参照下面的链接:点击打开链接
第四步:将请求参数字节话,最后进行加密。
经过这四步就生成了该request的指纹
因为include_headers是默认的,所以如果你在判断是不是重复的request的时候,需要用到部分headers中的东西,你可以定义一个include_headers。以达到更好的判重的目的。