ValvePython / steamctl

🤸 Take control of Steam from your terminal
https://pypi.org/project/steamctl/
MIT License
306 stars 16 forks source link

[BUG] steamctl not able to download older manifests #54

Closed nutterthanos closed 1 year ago

nutterthanos commented 1 year ago

Description A clear and concise description of what the bug is.

trying to download older manifests of games results in HTTP 401 instead of HTTP 200 due to steamctl not request manifest code for older manifests and only requests manifest codes for latest manifest id in appinfo.

Steps to Reproduce the behavior (Include debug logs if possible and relevant)

  1. run steamctl depot download with the -m flag and try to download an older version of a game.

Expected behavior A clear and concise description of what you expected to happen.

steamctl downloads the older manifest/version of game with no http 401 and requests the manifest code for older manifests.

What actually happend Description of what actually happend

same as first description

Logs

steamctl -l debug (Include logs related ot the issue. Use `steamctl -l debug` to get detailed log) ``` [DEBUG] steamctl: Parsed args: {'versions_report': None, 'log_level': 'debug', 'anonymous': False, 'user': None, 'command': 'depot', '_cmd_func': 'steamctl.commands.depot.gcmds:cmd_depot_download', 'subcommand': 'download', 'cell_id': None, 'os': 'any', 'output': 'F:\\SteamLibrary\\steamapps\\content\\app_1186040\\depot_1186041\\', 'no_directories': False, 'no_progress': False, 'file': None, 'app': 1186040, 'depot': 1186041, 'manifest': 2103112450145035475, 'branch': 'public', 'password': None, 'skip_depot': None, 'skip_login': False, 'skip_licenses': False, 'vpk': False, 'skip_verify': False, 'name': None, 'regex': None} [DEBUG] SteamClient: Reading CM servers from 'C:\\Users\\conno\\AppData\\Local\\steamctl\\steamctl\\client\\cm_servers.json' [DEBUG] CMServerList: Added 80 new CM addresses. [DEBUG] steamctl.utils.storage: Opening file (r): C:\Users\conno\AppData\Local\steamctl\steamctl\cs_servers.json [DEBUG] CachingCDNClient: No steam licenses found on SteamClient instance [DEBUG] steamctl.utils.storage: Opening file (r): C:\Users\conno\AppData\Local\steamctl\steamctl\depot_keys.json [INFO] steamctl.commands.depot.gcmds: Skipping login [DEBUG] urllib3.connectionpool: Starting new HTTP connection (1): cache1-syd1.steamcontent.com:80 [DEBUG] urllib3.connectionpool: http://cache1-syd1.steamcontent.com:80 "GET /depot/1186041/manifest/2103112450145035475/5 HTTP/1.1" 401 98 [DEBUG] CachingCDNClient: Got HTTP 401 (EResult.Fail) HTTP Error 401 ```

Versions Report

steamctl --versions-report (Run steamctl --versions-report and paste the output below) ```yaml steamctl: 0.9.3 Dependencies: steam: 1.3.0 appdirs: 1.4.4 argcomplete: 2.0.0 tqdm: 4.62.3 arrow: 1.2.2 pyqrcode: 1.2.1 beautifulsoup4: 4.10.0 vpk: 1.4.0 vdf: 3.4 gevent-eventemitter: 2.1 gevent: 21.12.0 greenlet: 1.1.2 pyyaml: Not Installed pycryptodomex: 3.14.1 protobuf: 3.19.4 Python runtime: executable: C:\Python39\python.exe version: 3.9.10 (tags/v3.9.10:f2f3f53, Jan 17 2022, 15:14:21) [MSC v.1929 64 bit (AMD64)] platform: win32 System info: system: Windows machine: AMD64 release: 10 version: 10.0.19043 ```

Notes: depotdownloader manages to work fine downloading older manifests

Fatmice commented 1 year ago

Yes, it returns 401 for a manifest GID that's valid for steam's own download_depot console command

As an aside, info doesn't seem to return a list of prior manifests

nutterthanos commented 1 year ago

As an aside, info doesn't seem to return a list of prior manifests

maybe because info is asking for appinfo which appinfo only contains latest manifest gid for each branch that exists

nutterthanos commented 1 year ago

Yes, it returns 401 for a manifest GID that's valid for steam's own download_depot console command

it seems depotdownloader can at least grab older manifests tho its like there is code that prevents the steamclient/steamctl client from grabbing older manifests

Fatmice commented 1 year ago

It depends. If the manifest GID is for a password-locked branch, I've not be able to use depotdownloader grab the files even though I can with download_depot

it seems depotdownloader can at least grab older manifests tho its like there is code that prevents the steamclient/steamctl client from grabbing older manifests

nutterthanos commented 1 year ago

It depends. If the manifest GID is for a password-locked branch, I've not be able to use depotdownloader grab the files even though I can with download_depot

it seems depotdownloader can at least grab older manifests tho its like there is code that prevents the steamclient/steamctl client from grabbing older manifests

weird

nutterthanos commented 1 year ago

It depends. If the manifest GID is for a password-locked branch, I've not be able to use depotdownloader grab the files even though I can with download_depot

it seems depotdownloader can at least grab older manifests tho its like there is code that prevents the steamclient/steamctl client from grabbing older manifests

weird

actually steamctl seems to just skip login if you try to download a older manifest and returns a HTTP 401

rossengeorgiev commented 1 year ago

Manifest downloads now require a manifest code. I've been told older manifest can still be downloaded as Steam would return a manifest code, but perhaps that is no being handled properly I have to verify.

nutterthanos commented 1 year ago

Manifest downloads now require a manifest code. I've been told older manifest can still be downloaded as Steam would return a manifest code, but perhaps that is no being handled properly I have to verify.

did you verify?

nutterthanos commented 1 year ago

🎉