diff --git a/src/calibre/__init__.py b/src/calibre/__init__.py index 4a62a5f565..d264168754 100644 --- a/src/calibre/__init__.py +++ b/src/calibre/__init__.py @@ -371,20 +371,32 @@ def get_proxy_info(proxy_scheme, proxy_string): USER_AGENT = 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.13) Gecko/20101210 Gentoo Firefox/3.6.13' USER_AGENT_MOBILE = 'Mozilla/5.0 (Windows; U; Windows CE 5.1; rv:1.8.1a3) Gecko/20060610 Minimo/0.016' + +_ua_list = None def random_user_agent(choose=None): - choices = [ - 'Mozilla/5.0 (Windows NT 5.2; rv:2.0.1) Gecko/20100101 Firefox/4.0.1', - 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1', - 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1', - 'Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0', - 'Mozilla/5.0 (Windows NT 6.2; rv:9.0.1) Gecko/20100101 Firefox/9.0.1', - 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.63 Safari/534.3', - 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.78 Safari/532.5', - 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)', - ] - if choose is None: - choose = random.randint(0, len(choices)-1) - return choices[choose] + global _ua_list + if _ua_list is None: + try: + _ua_list = P('common-user-agents.txt', data=True, allow_user_override=False).decode('utf-8').splitlines() + except IOError: + # People running from source checkout + _ua_list = [ + # IE 11 - windows 10 + 'Mozilla/5.0 (Windows NT 10.0; Trident/7.0; rv:11.0) like Gecko', + # IE 11 - windows 8.1 + 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko', + # IE 11 - windows 8 + 'Mozilla/5.0 (Windows NT 6.2; Trident/7.0; rv:11.0) like Gecko', + # IE 11 - windows 7 + 'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko', + # 32bit IE 11 on 64 bit win 10 + 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko', + # 32bit IE 11 on 64 bit win 8.1 + 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko', + # 32bit IE 11 on 64 bit win 7 + 'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko', + ] + return random.choice(_ua_list) if choose is None else _ua_list[choose] def browser(honor_time=True, max_time=2, mobile_browser=False, user_agent=None, use_robust_parser=False, verify_ssl_certificates=True): '''