idlesign / torrt

Automates torrent updates for you
https://github.com/idlesign/torrt
BSD 3-Clause "New" or "Revised" License
112 stars 19 forks source link

qbittorrent remove torrent bug. [RUS] #72

Closed malef1k closed 2 years ago

malef1k commented 2 years ago

Возвращаясь опять к qbittorrent. командой walk торренты обновляет, то не удаляет старые. Также новый добавленный торрент не добавляется в список зарегестрированных (в torrt list его нет)

Логи при обновлении.

INFO: Torrent walk is triggered INFO: Torrent walk is started INFO: Getting torrents from qbittorrent ... INFO: Processing Foundation.S01.2160p.ATVP.WEB-DL.DDP5.1.Atmos.DoVi.by.DVT... INFO: Torrent is updated ERROR: QBittorrentRPC: Failed to query RPC http://127.0.0.1:8085/api/v2/torrents/delete: Bad Request ERROR: QBittorrentRPC: Failed to query RPC rem_torrent: Bad Request ERROR: Walk failed. Reason: Bad Request INFO: Torrent walk is finished

Логи если попытаться удалить какой либо из торрентов.

~# /var/packages/py3k/target/usr/local/bin/torrt remove_torrent 548a334b9604bd1de1c9aec800ff9133c71b2e0b INFO: Removing torrent 548a334b9604bd1de1c9aec800ff9133c71b2e0b (with data = False) ... INFO: Removing torrent using qbittorrent RPC ... ERROR: QBittorrentRPC: Failed to query RPC http://127.0.0.1:8085/api/v2/torrents/delete: Bad Request ERROR: QBittorrentRPC: Failed to query RPC rem_torrent: Bad Request Traceback (most recent call last): File "/var/packages/py3k/target/usr/local/lib/python3.8/site-packages/torrt/rpc/qbittorrent.py", line 118, in query raise QBittorrentRPCException(response.text.strip() or response.reason) torrt.rpc.qbittorrent.QBittorrentRPCException: Bad Request

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "/var/packages/py3k/target/usr/local/lib/python3.8/site-packages/torrt/rpc/qbittorrent.py", line 123, in query raise QBittorrentRPCException(f'{e}') torrt.rpc.qbittorrent.QBittorrentRPCException: Bad Request

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "/var/packages/py3k/target/usr/local/bin/torrt", line 8, in sys.exit(process_commands()) File "/var/packages/py3k/target/usr/local/lib/python3.8/site-packages/torrt/main.py", line 206, in process_commands remove_torrent(args['hash'], args['delete_data']) File "/var/packages/py3k/target/usr/local/lib/python3.8/site-packages/torrt/toolbox.py", line 256, in remove_torrent rpc_object.method_remove_torrent(hash_str, with_data=with_data) File "/var/packages/py3k/target/usr/local/lib/python3.8/site-packages/torrt/rpc/qbittorrent.py", line 192, in method_remove_torrent return self.auth_query(self.build_params('rem_torrent', {'data': data})) File "/var/packages/py3k/target/usr/local/lib/python3.8/site-packages/torrt/rpc/qbittorrent.py", line 137, in auth_query return self.query(data, files) File "/var/packages/py3k/target/usr/local/lib/python3.8/site-packages/torrt/rpc/qbittorrent.py", line 128, in query raise QBittorrentRPCException(f'{e}') torrt.rpc.qbittorrent.QBittorrentRPCException: Bad Request

idlesign commented 2 years ago

Спасибо. На неделе погляжу, что там ещё не так.

idlesign commented 2 years ago

Пока только предположение, что вопреки документации qbit не принимает POST

Что происходит, если попробовать в браузере перейти по http://127.0.0.1:8085/api/v2/login?username=XXX&password=YYY (тут вставить логин и пароль) http://127.0.0.1:8085/api/v2/torrents/delete?hashes=ZZZ (а тут хеш торрента, например тот же 548a334b9604bd1de1c9aec800ff9133c71b2e0b)

malef1k commented 2 years ago

Если перейти по http://ip_address:8085/api/v2/login?username=XXX&password=YYY То в браузере следующий ответ "Unacceptable file type, only regular file is allowed." или "Not Found" Если перейти по адресу http://ip_address:8085/api/v2/torrents/delete?hashes=HASH "Forbidden"

Как я понял из документации сначала надо получить cookie.

Тоесть если сначала залогиниться на веб интерфейс по ip адресу

Потом по запросу http://ip_address:8085/api/v2/auth/login, приходит Ok. И если удалить торретн через http://ip_address:8085/api/v2/torrents/delete?hashes=64308f968dcfd1410f6531a08e902f74cfe73077&deleteFiles=false тоже ок.

Или же

curl -i --header 'Referer: http://localhost:8085' --data 'username=username&password=password' http://localhost:8085/api/v2/auth/login

Получаешь ответ

HTTP/1.1 200 OK
connection: keep-alive
content-length: 3
content-security-policy: default-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; script-src 'self' 'unsafe-inline'; object-src 'none'; form-action 'self'; frame-ancestors 'self';
content-type: text/plain; charset=UTF-8
date: Wed, 20 Oct 2021 15:02:48 GMT
referrer-policy: same-origin
set-cookie: SID=LUNypb+uoJgAv00mm6FDWZMLoy29WHhW; HttpOnly; path=/
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-xss-protection: 1; mode=block
curl "http://localhost:8085/api/v2/torrents/delete?hashes=64308f968dcfd1410f6531a08e902f74cfe73077&deleteFiles=false" --cookie "SID=LUNypb+uoJgAv00mm6FDWZMLoy29WHhW"

И все удаляется

idlesign commented 2 years ago

curl "http://localhost:8085/api/v2/torrents/delete?hashes=64308f968dcfd1410f6531a08e902f74cfe73077&deleteFiles=false" --cookie "SID=LUNypb+uoJgAv00mm6FDWZMLoy29WHhW" И все удаляется

Отлично, спасибо. А теперь, что будет, если этот же запрос, только не GET, а POST, что-то вроде

curl -d "hashes=64308f968dcfd1410f6531a08e902f74cfe73077&deleteFiles=false" -X POST http://localhost:8085/api/v2/torrents/delete --cookie "SID=LUNypb+uoJgAv00mm6FDWZMLoy29WHhW"
malef1k commented 2 years ago

curl "http://localhost:8085/api/v2/torrents/delete?hashes=64308f968dcfd1410f6531a08e902f74cfe73077&deleteFiles=false" --cookie "SID=LUNypb+uoJgAv00mm6FDWZMLoy29WHhW" И все удаляется

Отлично, спасибо. А теперь, что будет, если этот же запрос, только не GET, а POST, что-то вроде

curl -d "hashes=64308f968dcfd1410f6531a08e902f74cfe73077&deleteFiles=false" -X POST http://localhost:8085/api/v2/torrents/delete --cookie "SID=LUNypb+uoJgAv00mm6FDWZMLoy29WHhW"

Да, все работает, оба варианта, с файлами и без.

idlesign commented 2 years ago

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