Skip to content
This repository was archived by the owner on Feb 28, 2019. It is now read-only.

Commit 26e1d09

Browse files
committed
client request text rewrite improve
1 parent a7d4163 commit 26e1d09

File tree

2 files changed

+19
-15
lines changed

2 files changed

+19
-15
lines changed

EasyWebsiteMirror.py

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
errprint('Can Not Create Local File Cache: ', e, ' local file cache is disabled automatically.')
4343
local_cache_enable = False
4444

45-
__VERSION__ = '0.18.4-dev'
45+
__VERSION__ = '0.18.5-dev'
4646
__author__ = 'Aploium <i@z.codes>'
4747

4848
# ########## Basic Init #############
@@ -60,7 +60,8 @@
6060
myurl_prefix = my_host_scheme + my_host_name
6161
myurl_prefix_escaped = myurl_prefix.replace('/', r'\/')
6262
cdn_domains_number = len(CDN_domains)
63-
63+
allowed_remote_response_headers = {'content-type', 'date', 'expires', 'cache-control', 'last-modified', 'server', 'location'}
64+
allowed_remote_response_headers.update(custom_allowed_remote_headers)
6465
# ## Get Target Domain's Root Domain ##
6566
_temp = target_domain.split('.')
6667
if len(_temp) <= 2 or len(_temp) == 3 and _temp[1] in ('com', 'net', 'org', 'co', 'edu', 'mil', 'gov', 'ac'):
@@ -731,12 +732,9 @@ def copy_response(requests_response_obj, content=b''):
731732
assert isinstance(resp, Response)
732733
for header_key in requests_response_obj.headers:
733734
# Add necessary response headers from the origin site, drop other headers
734-
if header_key.lower() in (
735-
'content-type', 'date', 'expires', 'cache-control', 'last-modified', 'server'):
736-
resp.headers[header_key] = requests_response_obj.headers[header_key]
737-
# Rewrite the redirection header if we got one, rewrite in-zone domains to our domain
738-
if header_key.lower() == 'location':
735+
if header_key.lower() in allowed_remote_response_headers:
739736
resp.headers[header_key] = response_text_rewrite(requests_response_obj.headers[header_key])
737+
740738
# Rewrite The Set-Cookie Header, change the cookie domain to our domain
741739
if header_key.lower() == 'set-cookie':
742740
# cookie_header_str = dump_cookie_jars_to_header_string_dict(requests_response_obj.cookies)
@@ -950,11 +948,8 @@ def extract_client_header():
950948
head_name_l = head_name.lower()
951949
if (head_name_l not in ('host', 'content-length', 'content-type')) \
952950
or (head_name_l == 'content-type' and head_value != ''):
953-
outgoing_head[head_name_l] = head_value
951+
outgoing_head[head_name_l] = client_requests_text_rewrite(head_value)
954952

955-
# rewrite referer head if we have
956-
if 'referer' in outgoing_head:
957-
outgoing_head['referer'] = client_requests_text_rewrite(outgoing_head['referer'])
958953
if verbose_level >= 3: dbgprint('FilteredRequestHeaders:', outgoing_head)
959954
return outgoing_head
960955

@@ -972,19 +967,23 @@ def client_requests_text_rewrite(raw_text):
972967
to http%3a%2f%2faccounts.google.com%2f233
973968
"""
974969
replaced = regex_request_rewriter.sub('\g<origin_domain>', raw_text)
975-
replaced = replaced.replace(my_host_name_urlencoded, target_domain)
976-
replaced = replaced.replace(my_host_name_no_port, target_domain)
970+
# replaced = replaced.replace(my_host_name_urlencoded, target_domain)
971+
# replaced = replaced.replace(my_host_name_no_port, target_domain)
972+
973+
# 32MB == 33554432
974+
replaced = client_requests_bin_rewrite(replaced.encode(), max_len=33554432).decode()
975+
977976
if verbose_level >= 3 and raw_text != replaced:
978977
dbgprint('ClientRequestedUrl: ', raw_text, '<- Has Been Rewrited To ->', replaced)
979978
return replaced
980979

981980

982-
def client_requests_bin_rewrite(raw_bin):
981+
def client_requests_bin_rewrite(raw_bin, max_len=8192):
983982
"""
984983
985984
:type raw_bin: byte
986985
"""
987-
if raw_bin is None or len(raw_bin) > 8192:
986+
if raw_bin is None or len(raw_bin) > max_len:
988987
return raw_bin
989988
else:
990989
_str_buff = my_host_name + '/extdomains'

config.sample.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,11 @@
8484
# 设置为 None 表示关闭显式编码指定, 'utf-8' 代表utf-8
8585
force_decode_remote_using_encode = None
8686

87+
# v0.18.5+
88+
# eg: {'access-control-max-age', 'access-control-allow-origin', 'x-connection-hash'}
89+
# must be lower case
90+
custom_allowed_remote_headers = {}
91+
8792
# #####################################################
8893
# ################# ADVANCED Settings #################
8994
# #####################################################

0 commit comments

Comments
 (0)