Задать вопрос
@Am1rka01

Как исправить ошибку с SSL?

Здравствуйте, попытался написать код, для загрузки видео из 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()
  • Вопрос задан
  • 92 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
Lord_of_Rings
@Lord_of_Rings Куратор тега Python
Дунадан - северный странник. Злой, но очень добрый
Хе-хе, узнаю свою статью) У меня такое тоже было и связано это скорее всего с nodpi (технологией его работы), ну или ютубу очень не хочется, чтобы у него воровали видео) Для начала попробуйте последнюю версию nodpi - https://github.com/GVCoder09/NoDPI/releases (можно установить exe-шник и запускать его). Если это не поможет, то для проверки установите последнюю версию pytubefix - там много чего пофиксили pip3 install --upgrade pytubefix Если и это не поможет, то увы, ничем больше помочь не могу, проблемы на стороне ютуба
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы