Skip to content

Commit

Permalink
Fix SSL context
Browse files Browse the repository at this point in the history
Fixed SSL error when using a proxy server. If other script that redefined the variable ssl._create_default_https_context on ssl._create_unverified_context
  • Loading branch information
alekssamos committed Nov 11, 2020
1 parent cdbb462 commit bbd1bc7
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 52 deletions.
22 changes: 11 additions & 11 deletions example/out.txt
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
Однажды лиса увидела, как ворона улетела с куском сыра в клюве и села на ветку дерева.
-Это для меня, потому что я Лис, - сказал Мастер Рейнард и подошел к подножию дерева.
- Добрый день, госпожа Ворона! - воскликнул он. -Как хорошо ты выглядишь сегодня: как блестят твои перья, как блестят твои глаза. Я уверен, что твой голос должен превзойти голос других птиц, так же как и твоя фигура; позволь мне услышать от тебя только одну песню, чтобы я мог приветствовать тебя как королеву птиц."
-Добрый день, госпожа Ворона! - воскликнул он. - Как хорошо ты выглядишь сегодня: как блестят твои перья, как блестят твои глаза. Я уверен, что твой голос должен превзойти голос других птиц, так же как и твоя фигура; позволь мне услышать от тебя только одну песню, чтобы я мог приветствовать тебя как королеву птиц."
Ворона подняла голову
и принялась каркать изо всех сил, но едва она открыла рот, как кусок сыра упал на землю и был тут же схвачен мастером Лисом.
-Довольно, - сказал он. -Это все, чего я хотел. В обмен на ваш сыр я дам вам совет на будущее: "не доверяйте льстецам."
и принялась каркать изо всех сил, но едва она открыла рот, как кусок сыра упал на землю и был тут же схвачен мастером лисом.
-Довольно,- сказал он. - Это все, чего я хотел. В обмен на ваш сыр я дам вам совет на будущее: "не доверяйте льстецам."

Однажды, когда Лев спал, маленькая мышка начала бегать вверх и вниз по нему; это вскоре разбудило Льва, который положил на него свою огромную лапу и открыл свою большую пасть, чтобы проглотить его. - Прости, О царь, - воскликнул король.
Мышонок: "прости меня на этот раз, я никогда этого не забуду: кто знает, может быть, когда-нибудь я смогу тебе помочь? Льву так понравилась мысль о том, что мышонок может ему помочь, что он поднял лапу и отпустил его.
Через некоторое время Лев был пойман в капкан, и охотники, желавшие доставить его живым к царю, привязали его к дереву, а сами отправились на поиски повозки, чтобы перевезти его дальше. Как раз в это время Мышонок случайно проходил мимо и увидел печальное положение дел.
в котором находился лев, подошел к нему и вскоре перегрыз веревки, которыми был связан царь зверей. -Разве я не был прав?- сказал Мышонок.
Однажды, когда Лев спал, маленькая мышка начала бегать вверх и вниз по нему; это вскоре разбудило Льва, который положил на него свою огромную лапу и открыл свою большую пасть, чтобы проглотить его. -Прости, О царь, - воскликнул король.
мышонок: "прости меня на этот раз, я никогда этого не забуду: кто знает, может быть, когда-нибудь я смогу тебе помочь?" Льву так понравилась мысль о том, что мышонок может ему помочь, что он поднял лапу и отпустил его.
Через некоторое время Лев был пойман в капкан, и охотники, желавшие доставить его живым к царю, привязали его к дереву, а сами отправились на поиски повозки, чтобы перевезти его дальше. Как раз в это время мышонок случайно проходил мимо и увидел печальное положение дел.
в котором находился лев, подошел к нему и вскоре перегрыз веревки, которыми был связан царь зверей. - Разве я не была права? - спросила мышка.

Однажды Заяц хвастался своей быстротой перед другими животными. -Меня еще ни разу не били, - сказал он, - когда я набирал полную скорость. Я бросаю вызов любому здесь, чтобы участвовать в гонке со мной."
Черепаха спокойно сказала: "Я принимаю твой вызов."
-Это хорошая шутка, - сказал Заяц. - я мог бы танцевать вокруг тебя всю дорогу."
- Продолжай хвастаться, пока не выиграешь, - ответил он.
- Это хорошая шутка, - сказал Заяц. - я мог бы танцевать вокруг тебя всю дорогу."
-Продолжай хвастаться, пока не выиграешь, - ответил он.
черепаха. - Может, наперегонки?"
Итак, курс был определен, и старт был сделан. Заяц почти сразу же скрылся из виду, но вскоре остановился и, чтобы показать свое презрение к черепахе, прилег вздремнуть. Черепаха все плелась и плелась, а когда заяц очнулся от дремоты, он увидел черепаху совсем рядом с победным столбом и не успел вовремя подбежать, чтобы спасти гонку.
Итак, курс был определен, и старт был сделан. Заяц почти сразу же скрылся из виду, но вскоре остановился и, чтобы показать свое презрение к черепахе, прилег вздремнуть. Черепаха все плелась и плелась, а когда заяц очнулся от сна, он увидел черепаху совсем рядом с победным столбом и не успел вовремя подбежать, чтобы спасти гонку.
Тогда Черепаха сказала: "медленный, но устойчивый прогресс побеждает в гонке."

Ветер и Солнце спорили, кто сильнее.
Внезапно они увидели путника, идущего по дороге, и Солнце сказало: "Я вижу способ решить наш спор. Тот из нас, кто заставит этого путника снять плащ, будет считаться более сильным. Вы начинаете. Солнце скрылось за облаком, и ветер стал дуть так сильно, как только мог, на путешественника. Но чем сильнее он дул, тем плотнее путник закутывался в плащ, и наконец ветер в отчаянии сдался. Затем вышло солнце и засияло во всей своей славе.
Внезапно они увидели путника, идущего по дороге, и Солнце сказало: "Я вижу способ решить наш спор. Тот из нас, кто заставит этого путника снять плащ, будет считаться более сильным. Вы начинаете." Солнце скрылось за облаком, и ветер стал дуть на путника так сильно, как только мог. Но чем сильнее он дул, тем плотнее путник закутывался в плащ, и наконец ветер в отчаянии сдался. Затем вышло солнце и засияло во всей своей славе.
путешественник, которому вскоре стало слишком жарко, чтобы идти в плаще.


Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

setup(
name="yandexfreetranslate",
version="1.2",
version="1.3",
author="alekssamos",
author_email="[email protected]",
url="https://github.com/alekssamos/yandexfreetranslate/",
Expand Down
99 changes: 59 additions & 40 deletions yandexfreetranslate/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#!/usr/bin/env python3
try: from utils import smartsplit
except: from .utils import smartsplit
import ssl
import json
import os
import os.path
Expand Down Expand Up @@ -73,18 +74,27 @@ def _sid_to_key(self, sid):
for item in sid.split(splitter): l.append(item[::-1])
return splitter.join(l)+self.keysuffix
def _parse_sid(self):
req = self._create_request(self.siteurl)
req.add_header("User-Agent", self.ua)
req.add_header("Accept", r"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 ")
req.add_header("Accept-Language", r"ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3")
req.add_header("DNT", "1")
req.add_header("Accept-Encoding", "gzip, deflate, br")
page = self._create_opener().open(req).read().decode("UTF8")
#open("page.html", "w", encoding="utf8").write(page)
try:
return re.search(r'''SID[\s]?[:][\s]?['"]([^'"]+)['"]''', page).group(1)
except AttributeError:
raise YandexFreeTranslateError("blocked or not found")
if self.useProxy:
old_context = ssl._create_default_https_context
ssl._create_default_https_context = ssl.create_default_context
req = self._create_request(self.siteurl)
req.add_header("User-Agent", self.ua)
req.add_header("Accept", r"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 ")
req.add_header("Accept-Language", r"ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3")
req.add_header("DNT", "1")
req.add_header("Accept-Encoding", "gzip, deflate, br")
page = self._create_opener().open(req).read().decode("UTF8")
#open("page.html", "w", encoding="utf8").write(page)
try:
return re.search(r'''SID[\s]?[:][\s]?['"]([^'"]+)['"]''', page).group(1)
except AttributeError:
raise YandexFreeTranslateError("blocked or not found")
except: raise
finally:
if self.useProxy:
ssl._create_default_https_context = old_context

def _save_key(self, key):
with open(self.keyfilename, "w", encoding="utf8") as f:
f.write(key)
Expand All @@ -107,35 +117,44 @@ def __init__(self):
if not os.path.isfile(self.keyfilename) and os.path.isfile(self.keyfilename+".back"):
os.rename(self.keyfilename+".back", self.keyfilename)
def translate(self, source = "auto", target="", text=""):
if self.key == "": self.key = self._get_key()
if source == "auto": source = ""
if len(source) != 0 and len(source) != 2: raise ValueError("source")
if len(target) == 0 or len(target) > 2: raise ValueError("target")
if text == "": raise ValueError("text")
if source==target: return text
if source == "": lang = target
else: lang = source+"-"+target
p=[]
for part in smartsplit(text, 500, 550):
req = self._create_request(self.apibaseurl+"translate?"+urllibparse.urlencode({
"id":self.key, "srv":"tr-text", "lang":lang, "reason":"paste"
}))
req.add_header("User-Agent", self.ua)
req.add_header("Accept", r"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 ")
req.add_header("Accept-Language", r"ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3")
req.add_header("DNT", "1")
req.add_header("Accept-Encoding", "gzip, deflate, br")
try:
content = self._create_opener().open(req, data = urllibparse.urlencode({
"options": 4, "text":part
}).encode("UTF8")).read().decode("UTF8")
resp = json.loads(content)
except json.JSONDecodeError:
raise YandexFreeTranslateError(content)
if "text" not in resp:
raise YandexFreeTranslateError(content)
p.append(resp["text"][0])
return "\n".join(p)
try:
if self.useProxy:
old_context = ssl._create_default_https_context
ssl._create_default_https_context = ssl.create_default_context
if self.key == "": self.key = self._get_key()
if source == "auto": source = ""
if len(source) != 0 and len(source) != 2: raise ValueError("source")
if len(target) == 0 or len(target) > 2: raise ValueError("target")
if text == "": raise ValueError("text")
if source==target: return text
if source == "": lang = target
else: lang = source+"-"+target
p=[]
for part in smartsplit(text, 500, 550):
req = self._create_request(self.apibaseurl+"translate?"+urllibparse.urlencode({
"id":self.key, "srv":"tr-text", "lang":lang, "reason":"paste"
}))
req.add_header("User-Agent", self.ua)
req.add_header("Accept", r"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 ")
req.add_header("Accept-Language", r"ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3")
req.add_header("DNT", "1")
req.add_header("Accept-Encoding", "gzip, deflate, br")
try:
content = self._create_opener().open(req, data = urllibparse.urlencode({
"options": 4, "text":part
}).encode("UTF8")).read().decode("UTF8")
resp = json.loads(content)
except json.JSONDecodeError:
raise YandexFreeTranslateError(content)
if "text" not in resp:
raise YandexFreeTranslateError(content)
p.append(resp["text"][0])
return "\n".join(p)
except: raise
finally:
if self.useProxy:
ssl._create_default_https_context = old_context



if __name__ == "__main__":
Expand Down

0 comments on commit bbd1bc7

Please sign in to comment.