Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fail to download torrent file if we got redirect and we use cookie #410

Open
antonsoroko opened this issue Apr 29, 2024 · 6 comments
Open

Comments

@antonsoroko
Copy link
Contributor

antonsoroko commented Apr 29, 2024

найдено из-за #400

с https://www3.yggtorrent.wtf сейчас идёт редирект на https://www3.yggtorrent.cool

казалось бы не надо ничего менять в json конфиге, но если не сменить домен для хотя бы "torrent": то не получается скачать торрент файл.

Если в elementum включить встроенный прокси, у него включить дебаг в лог, а в burst включить использование этого прокси - то будет видно что происходит:
идёт авторизация на .wtf, получает редирект на .cool, получает куки на .cool, идёт скачивание на .wtf без кук (у нас куки от другого домена), получает редирект 301 .cool, идёт на .cool с куками, но сайт отвечает что надо авторизоваться. Если редиректов нет (если поправить json для хотябы "torrent":), то работает нормально с теми же куками.
Поиск работает нормально с редиректом, потому что не обязательна авторизация для поиска у них, а вот именно скачка торрента не работает, так как там обязательна авторизация у них. Но мы выставляем же куки вроде, как у меня в логе ниже. похоже что не выставляем.

Я так и не понял это проблема самого сайта или burst. @elgatito прошу глянуть.

DEBU  proxy        ▶ dumpRequest      [787] --> GET https://www3.yggtorrent.wtf:443/engine/download_torrent?id=1054618
DEBU  proxy        ▶ dumpRequest      REQUEST:
GET /engine/download_torrent?id=1054618 HTTP/1.1
Host: www3.yggtorrent.wtf
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36

DEBU  proxy        ▶ dumpResponse     [787] <-- 301 https://www3.yggtorrent.wtf:443/engine/download_torrent?id=1054618
DEBU  proxy        ▶ dumpResponse     RESPONSE:
HTTP/1.1 301 Moved Permanently
Content-Length: 167
Alt-Svc: h3=":443"; ma=86400
Cache-Control: max-age=3600
Cf-Ray: 87b7c6091c563253-VIE
Connection: keep-alive
Content-Type: text/html
Date: Sun, 28 Apr 2024 14:34:31 GMT
Expires: Sun, 28 Apr 2024 15:34:31 GMT
Location: https://www3.yggtorrent.cool/engine/download_torrent?id=1054618
Nel: {"success_fraction":0,"report_to":"cf-nel","max_age":604800}
Report-To: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v4?s=URPG%2B3LeBNnH5v7fBD9tBYcjVvWr%2FymO3ywcXyY5rZF%2FaZ5MCoasHzuu2y3QXmnDt%2FlxnXkl%2BjtpCNyKEeWbwKKCU9EHtnRRQjLcQ679BqXIdZKZw8nvu4k3Rrgp8PVd3eB%2B57tK"}],"group":"cf-nel","max_age":604800}
Server: cloudflare
Vary: Accept-Encoding

<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>cloudflare</center>
</body>
</html>

DEBU  proxy        ▶ dumpRequest      [821] --> GET https://www3.yggtorrent.cool:443/engine/download_torrent?id=1054618
DEBU  proxy        ▶ dumpRequest      REQUEST:
GET /engine/download_torrent?id=1054618 HTTP/1.1
Host: www3.yggtorrent.cool
Referer: https://www3.yggtorrent.wtf/engine/download_torrent?id=1054618


DEBU  proxy        ▶ dumpResponse     [821] <-- 200 https://www3.yggtorrent.cool:443/engine/download_torrent?id=1054618
DEBU  proxy        ▶ dumpResponse     RESPONSE:
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Cache-Control: no-store, no-cache, must-revalidate
Cf-Cache-Status: DYNAMIC
Cf-Ray: 87b7c60b8e602bcd-FRA
Connection: keep-alive
Content-Type: text/html; charset=UTF-8
Date: Sun, 28 Apr 2024 14:34:31 GMT
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Nel: {"success_fraction":0,"report_to":"cf-nel","max_age":604800}
Pragma: no-cache
Report-To: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v4?s=rZ5bMQsNoZ8SRTfP8p6UKStEjx1w6ixSZb4ROxCEpP%2BNDCZNXTmTLjc1C8Y1%2FedQwuu8%2B8mIQhAo7ecL5Xa0ZJuT3xbwzyRwAzD5g8kzoB7czsUz6GOlselzHbQpf%2BA47JB6KPif"}],"group":"cf-nel","max_age":604800}
Server: cloudflare
Set-Cookie: ygg_=xxx; expires=Sun, 28-Apr-2024 16:34:31 GMT; Max-Age=7200; path=/; SameSite=None; domain=.yggtorrent.cool; secure; HttpOnly
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN

37
Vous devez vous connecter pour télécharger un torrent
0

WARN  linkssearch  ▶ 1                Resolve failed for https://www3.yggtorrent.wtf/engine/download_torrent?id=1054618|User-Agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 : Invalid input

Vous devez vous connecter pour télécharger un torrent -> Вы должны войти в систему, чтобы скачать торрент

UPD:
ещё вижу что был фикс когда-то на похожую тему "added fixes for having redirections from providers".

@antonsoroko
Copy link
Contributor Author

@elgatito
а вот запрос и ответ без редиректов когда

�[36mDEBU  proxy        ▶ dumpRequest      �[0m[321] --> GET https://www3.yggtorrent.cool:443/engine/download_torrent?id=1054782
�[36mDEBU  proxy        ▶ dumpRequest      �[0mREQUEST:
GET /engine/download_torrent?id=1054782 HTTP/1.1
Host: www3.yggtorrent.cool
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7,uk;q=0.6,pl;q=0.5
Cache-Control: max-age=0
Content-Language: en
Cookie: ygg_=XXX
Origin: https://www3.yggtorrent.cool/engine/search?do=search&name=flash+2023&order=desc&sort=seed
Referer: https://www3.yggtorrent.cool/engine/search?do=search&name=flash+2023&order=desc&sort=seed
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 OPR/109.0.0.0

�[36mDEBU  proxy        ▶ dumpResponse     �[0m[321] <-- 200 https://www3.yggtorrent.cool:443/engine/download_torrent?id=1054782
�[36mDEBU  proxy        ▶ dumpResponse     �[0mRESPONSE:
HTTP/1.1 200 OK
Content-Length: 83909
Cache-Control: no-store, no-cache, must-revalidate
Cf-Cache-Status: DYNAMIC
Cf-Ray: 87c012a3bb7a04aa-CDG
Connection: keep-alive
Content-Disposition: attachment; filename="The.Flash.2023.MULTI.2160p.HDR10Plus.DV.WEBRip.6CH.x265.HEVC-Elcrackito.mkv.torrent"
Content-Type: application/x-bittorrent
Date: Mon, 29 Apr 2024 14:44:55 GMT
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Nel: {"success_fraction":0,"report_to":"cf-nel","max_age":604800}
Pragma: no-cache
Report-To: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v4?s=UXriaE%2BrPVDt6e8ZgyMSUJKm2uia%2BKqIqzH7OPVqppQ2gRAxFfXYzSEMQVr9GR9Ftk8Mo9RhybqGP6mVpGrv7sh%2Byt%2FjrugLCyLcB1ZOx7Ys0ZMFSSwIGx53YeQj04QNs7aMyOjl"}],"group":"cf-nel","max_age":604800}
Server: cloudflare
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN

и тут видно что мы в запросе выставляем Cookie: ygg_=XXX , и если сравнить с логом выше то видно что там мы не выставляем Cookie.
короче, получается мы не выставляем Cookie если есть редирект.

@elgatito
Copy link
Owner

казалось бы не надо ничего менять в json конфиге, но если не сменить домен для хотя бы "torrent": то не получается скачать торрент файл.

Проблема обычно в этом - https://github.com/elgatito/script.elementum.burst/blob/master/burst/providers/providers.json#L2873

Если ссылка на торрент формируется исходя из домена, который в base_url, то нужно чтоб эти значения были актуальными, потому что куки на реальный домен выписываются, а не тот что мы предполагаем. Поэтому Burst авторизуется, получает список, отдаёт Elementum вместе с куками, но Elementum получить ничего не может, потому что кука выписана на один домен, а стучимся мы на другой.

Наверное нужно в Burst переделать формирование ссылок чтоб везде правильные домены были и работало оно везде одинаково.

И убрать такие вещи - https://github.com/elgatito/script.elementum.burst/blob/master/burst/providers/providers.json#L124 , чтоб домен подставлялся через Burst по той же логике (если это тот же домен).

@antonsoroko
Copy link
Contributor Author

@elgatito

  1. по поводу
    "torrent": "'/engine/download_torrent?id=%s' % item(tag='a', attribute='target', order=3)"

там как раз таки был жестко прописал домен, но старый. я в последних комитах сделал, чтобы можно было относительные ссылки делать, чтобы проще было менять старый домен на новый.

или я не понял что ты хотел сказать по поводу "Проблема обычно в этом".

  1. по поводу кук я уже понял где косяк:
    добавил перед

log.debug("[%s] cookie_domain: %s" % (provider, repr(cookie_domain)))
log.debug("[%s] Cookies: %s" % (provider, repr(cookies)))

и понял что да, получили мы до этого куку на один домен а в итоге делаем запрос на другой
[yggtorrent] cookie_domain: 'yggtorrent.wtf'
[yggtorrent] Cookies: []

соотв куки пустые.

всё как ты описал.

  1. было бы приколько если бы библиотека могла сама брать общие куки и из них выбирать куки для запроса, тогда бы работало для редиректом, да и не приходилось бы в коде парсить файл с куками.

если такую магию сделать нельзя, то тогда придётся менять домены всегда руками в конфиге.

@antonsoroko
Copy link
Contributor Author

По поводу автоматической подстановки cookie для всех запросов - в принципе было бы круто такую фичу иметь, но конкретно для редиректов это может и не супер критично, потому что редиректы это временное решение авторов трекера и в какой-то момент придётся всё равно поменять домен в конфиге (когда старый домен отвалится).

Но было бы интересно посмотреть на техническую реализацию с куками.

@elgatito
Copy link
Owner

было бы приколько если бы библиотека могла сама брать общие куки и из них выбирать куки для запроса, тогда бы работало для редиректом, да и не приходилось бы в коде парсить файл с куками.

Есть общий cookie jar в Burst, где хранятся все куки и для каждого домена выбираются и передаются к Elementum. Передавать весь cookie jar в теории наверное можно, но это может быть большой размер хранилища.

@antonsoroko
Copy link
Contributor Author

@elgatito я имел ввиду другое: не руками выставлять куки для запроса в конкретном месте для конкретного запроса, как в

а как-то в общем, внутри http вызовов выставлять куки, чтобы даже если произошел редирект, то все равно куки выставились бы автоматически.

ну это наверное надо менять именно код http клиента.
просто интересно, возможно ли так сделать.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants