YouROK / TorrServer

Torrent stream server
GNU General Public License v3.0
1.61k stars 199 forks source link

[Feature] Прокси для http запросов #463

Open ksweidmann opened 3 weeks ago

ksweidmann commented 3 weeks ago

Is your feature request related to a problem? Please describe. Некоторые провайдеры блокируют http траффик к торрент трекерам что приводит к ошибкам получения постеров к раздачам.

Describe the solution you'd like Добавить возможность включения прокси только для http запросов

leporel commented 1 day ago

Если я правильно понимаю, достаточно прокси в браузере, через который заходишь в веб панель, и все у тебя будет работать Потому что сервер не тащит картинку, а хранит только ссылку на imagetmdb.com или image.tmdb.org

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

ksweidmann commented 1 day ago

Картинку постера оно как раз и дергает по ссылке с сайта, не через браузер.13:06, 24 ноября 2024 г., Viacheslav @.***>: Если я правильно понимаю, достаточно прокси в браузере, через который заходишь в веб панель, и все у тебя будет работать Потому что сервер не тащит картинку, а хранит только ссылку на imagetmdb.com или image.tmdb.org Если хотеть постеры всегда, то их скачивать и кешировать надо в базу, но смысла мало, оффлайн от торрсервера пользы же нету.

—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you authored the thread.Message ID: @.***>

leporel commented 1 day ago

Картинку постера оно как раз и дергает по ссылке с сайта

А оно это где? Клиент, dlna или где картинка должна появится?

ksweidmann commented 1 day ago

На сколько  понял, оно как раз хранится на стороне сервера т.к. если постер есть, то он потом отображается на любом клиенте, будь то телевизор/телефон и тд.Если постер не удалось скачать, то как раз серверная часть пишет в логе о том, что изображение не удалось скачать13:20, 24 ноября 2024 г., Viacheslav @.***>:

Картинку постера оно как раз и дергает по ссылке с сайта

А оно это где? Клиент, dlna или где картинка должна появится?

—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you authored the thread.Message ID: @.***>

leporel commented 1 day ago

Я по коду посмотрел, он без постера добавляется, потому что он проверяет "может ли получить картинку по ссылке", если не может, то и ссылку не добавляет

Тут момент такой, что даже если и через прокси тянуть ссылку, проверить её валидность и добавлять к торренту, то на клиентах все равно она не отобразится, потому что на клиентах же нету прокси чтобы по этой ссылке получить картинку. (проблема в апи для поиска каринки, сами картинки работают без прокси)

leporel commented 1 day ago

Ссылку на постер можно и самому добавить (обновить торент в вебпанели), достаточно простое решение проблемы

А иначе если автоматизировать через прокси, то надо и клиенты переделывать и сервер, к серверу я мог бы пулл реквест сделать, но по клиентам компетенция у меня не та) Ну или искать альтернативные сервисы(API) для получения(поиска по имени фильма) ссылки на постер, которые не блокируются.

ksweidmann commented 1 day ago

Довольно странно. Может мы о чем то разном?Я запускаю сервер на компьютере с windows. Клиент у меня телевизор, торрент добавляю через браузер.Если постер успешно скачивается то он отображается и на клиенте и в браузере. Если сайт торрентов заблокирован (например РКН), то при добавлении торрент и попытке скачать постер (картинку), серверная часть пишет в лог ошибку.Точно такую же ошибку серверная часть пишет даже если руками пойти и вставить ссылку в поле для постера. Я позже могу со скриншотами сделать пояснения13:43, 24 ноября 2024 г., Viacheslav @.***>: Ссылку на постер можно и самому добавить, достаточно простое решение проблемы А иначе если автоматизировать через прокси, то надо и клиенты переделывать и сервер, к серверу я мог бы пулл реквест сделать, но по клиентам компетенция у меня не та)

—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you authored the thread.Message ID: @.***>

leporel commented 1 day ago

Ну кстати блокируется не РКНом, а сайт для получения постеров блокирует ру сегмент (проверить - nslookup api.themoviedb.org в консоле, ответ будет 127.0.0.1) Одно из решений, это установить DNS 9.9.9.9, он не имеет гео информации о том кто запрашивает резолвинг адреса и потому апишка для поиска постера ответит адекватно. Это раз.

Два. Вы файл или магнет ссылку используете для добавления? Если файл, то в файле есть имя раздачи и оно используется для поиска картинки, я потестил щас и если DNS адекватно отдаст адресс от сервиса то картинка должна найтись, если dns отдал 127.0.0.1, то вот что видно в консоле веб панели image Магнет ссылку я не тестировал с заблокированного трекера (но думаю это не должно быть важно если название подтягивается)

Не понял какую ошибку пишет вам сервер если постер самому добавлять, я либо из гугл картинок ссылку копирую или с самого сайта пример - ссылка

image

Вы можете добавить 9.9.9.9 как DNS на роутере, тогда все клиенты будут иметь доступ к api.themoviedb.org Вроде еще 77.88.8.88 (dns яндекса) адекватный адрес отдает для api.themoviedb.org, надо проверять.

leporel commented 1 day ago

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

Пример кода ```go func TestDNS(t *testing.T) { dnsResolver := &net.Resolver{ PreferGo: true, Dial: func(ctx context.Context, network, address string) (net.Conn, error) { d := net.Dialer{ Timeout: time.Second * time.Duration(5), } return d.DialContext(ctx, "tcp", "9.9.9.9:53") }, } client := &http.Client{ Transport: &http.Transport{ DialContext: (&net.Dialer{ Resolver: dnsResolver, }).DialContext, }, } TMDB_API_KEY := os.Getenv("TMDB_API_KEY") if TMDB_API_KEY == "" { t.Log("TMDB_API_KEY not set in environment variables") } url := &url.URL{ Scheme: "https", Host: "api.themoviedb.org", Path: "/3/search/multi", RawQuery: url.Values{ "api_key": {TMDB_API_KEY}, "query": {"Bleach"}, "language":{"en-US"}, }.Encode(), } t.Log(url.String()) resp, err := client.Get(url.String()) if err != nil { fmt.Println("Error:", err) return } defer resp.Body.Close() fmt.Println("Response status:", resp.Status) } ```

На стороне веба такое не провернуть я так понимаю, можно закостылить на сервере, что если ссылка пустая на постер пришла, то попробовать подтянуть через вот такой вот собственный клиент с кастомным DNS Я не знаю в какой момент втыкать лучше этот костыль, как я понимаю что из веба с делеем может постер придти.

tsynik commented 1 day ago

Для постера в торрсервере хранится просто url, никаких костылей ему не нужно. Обеспечить доступ - задача пользователя, а не торрсервера. Как и добавлять, или не добавлять картинки. Постер загружается сервером в момент добавления только для проверки, что по этому url действительно изображение, а не скрипт какой, не более.