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

Commit

Permalink
[*] 修改重定向逻辑, (希望能)解决 /ncr 失效的问题 #10
Browse files Browse the repository at this point in the history
  • Loading branch information
aploium committed Sep 24, 2016
1 parent a199bee commit ede55f9
Showing 1 changed file with 34 additions and 18 deletions.
52 changes: 34 additions & 18 deletions more_configs/experimental__custom_func_google.py
Expand Up @@ -6,6 +6,8 @@
from flask import Response, Request
from zmirror.zmirror import ZmirrorThreadLocal

ZMIRROR_NCR_COOKIE_NAME = "zmirror_ncr"


def custom_prior_redirect_func(request, parse):
"""
Expand All @@ -28,6 +30,16 @@ def custom_prior_redirect_func(request, parse):
修改方式是在 query string 中加入 hl=zh-CN
本函数的另一个作用就是在 query string 中加入 hl=zh-CN
所以, 新用户的请求是这样的:
* 第一次请求--> www.google.com --zmirror重定向--> www.google.com/ncr
--被google重定向--> www.google.com (此时看到的页面是英语的)
* 第二次请求--> www.google.com --zmirror重定向--> www.google.com/?hl=zh-CN (此时看到的页面为中文)
有一个缺点就是用户第一次请求看到的是英语界面, 从第二次请求开始, 看到的才是中文界面
这是因为如果在ncr后如果直接请求 /?hl=zh-CN 的话, 很快/ncr就会失效, 而重定向到 .com.hk
对于google镜像的国别重定向问题, 请看 issues#10
https://github.com/aploium/zmirror/issues/10
Expand All @@ -42,32 +54,36 @@ def custom_prior_redirect_func(request, parse):
from urllib.parse import urlsplit, urlunsplit
from flask import redirect

zmirror_ncr = request.cookies.get("zmirror_ncr")
zmirror_ncr = request.cookies.get(ZMIRROR_NCR_COOKIE_NAME)

if zmirror_ncr == "y" and parse.remote_path in ("/", "/webhp", "/search"):
# 如果在cookies中已经设置了zmirror的ncr标记 并且请求的是这三个path
# 则将搜索语言修改为中文(通过在query string中添加 hl=zh-CN 来实现)
if "hl=" in parse.remote_path_query: # 如果已经指定了 hl= 则跳过
return None
if parse.remote_path in ("/", "/webhp", "/search"):
if zmirror_ncr == "y":
# 如果在cookies中已经设置了zmirror的ncr标记 并且请求的是这三个path
# 则将搜索语言修改为中文(通过在query string中添加 hl=zh-CN 来实现)
if "hl=" in parse.remote_path_query: # 如果已经指定了 hl= 则跳过
return None

else:
# 否则通过重定向在 query string 中加入 hl=zh-CN
sp = list(urlsplit(request.url))
if sp[3] == "":
sp[3] = "hl=zh-CN"
else:
sp[3] += "&hl=zh-CN"
return redirect(urlunsplit(sp), code=307)
# 否则通过重定向在 query string 中加入 hl=zh-CN
sp = list(urlsplit(request.url))
if sp[3] == "":
sp[3] = "hl=zh-CN"
else:
sp[3] += "&hl=zh-CN"
return redirect(urlunsplit(sp), code=307)

elif parse.remote_path in ("/", "/webhp"):
# 仅当 prepared 以后的下一次访问 google首页才触发 /ncr 重定向
# ps: /webhp 等效于 /
return redirect("/ncr", code=302)
elif zmirror_ncr == "prepared":
parse.set_cookies(ZMIRROR_NCR_COOKIE_NAME, "y")

else:
# 仅当 prepared 以后的下一次访问 google首页才触发 /ncr 重定向
# ps: /webhp 等效于 /
return redirect("/ncr", code=302)

elif parse.remote_path == "/ncr":
# 如果正在请求 /ncr , 则在cookie中设置 zmirror_ncr=y (不作重定向)
# "y" 代表 yes
parse.set_cookies("zmirror_ncr", "y") # TTL是一年
parse.set_cookies(ZMIRROR_NCR_COOKIE_NAME, "prepared") # TTL是一年
return None

else:
Expand Down

0 comments on commit ede55f9

Please sign in to comment.