Здравствуйте, попытался написать код, для загрузки видео из YouTube. Но к сожалению получаю ошибку "urllib.error.URLError: (знак больше)urlopen error [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:1018)(знак меньше)"
Пытался понять в чём ее смысл, но не получилось. Может, вы подскажете?
Код (который фиксит сервера гугл):
import random
import asyncio
BLOCKED =[line.rstrip().encode() for line in open('blacklist.txt', 'r', encoding='utf-8')]
TASKS = []
async def main(host, port):
server = await asyncio.start_server(new_conn, host, port)
await server.serve_forever()
async def pipe(reader, writer):
while not reader.at_eof() and not writer.is_closing():
try:
writer.write(await reader.read(1500))
await writer.drain()
except:
break
writer.close()
async def new_conn(local_reader, local_writer):
http_data = await local_reader.read(1500)
try:
type, target = http_data.split(b"\r\n")[0].split(b" ")[0:2]
host, port = target.split(b":")
except:
local_writer.close()
return
if type != b"CONNECT":
local_writer.close()
return
local_writer.write(b'HTTP/1.1 200 OK\n\n')
await local_writer.drain()
try:
remote_reader, remote_writer = await asyncio.open_connection(host, port)
except:
local_writer.close()
return
if port == b'443':
await fragemtn_data(local_reader, remote_writer)
TASKS.append(asyncio.create_task(pipe(local_reader, remote_writer)))
TASKS.append(asyncio.create_task(pipe(remote_reader, local_writer)))
async def fragemtn_data(local_reader, remote_writer):
head = await local_reader.read(5)
data = await local_reader.read(1500)
parts = []
if all([data.find(site) == -1 for site in BLOCKED]):
remote_writer.write(head + data)
await remote_writer.drain()
return
while data:
part_len = random.randint(1, len(data))
parts.append(bytes.fromhex("1603") + bytes([random.randint(0, 255)]) + int(part_len).to_bytes(2, byteorder='big') + data[0:part_len])
data = data[part_len:]
remote_writer.write(b' '.join(parts))
await remote_writer.drain()
asyncio.run(main(host='127.0.0.1', port=8881))
Код загрузчика:
from pytubefix import YouTube
from pytubefix.cli import on_progress
url = "https://youtu.be/PCV5P6jzLcU?si=Z5PGw4LQ3g513SZ3"
video = YouTube(
proxies={"http": "http://127.0.0.1:8881",
"https": "http://127.0.0.1:8881"},
url=url,
on_progress_callback=on_progress,
)
print('Title:', video.title)
print(video.streams)
stream = video.streams.get_highest_resolution()
stream.download()