Repository: yt-dlp/yt-dlp

Issue:
WrestleUniverse Support Broken
### DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

- [X] I understand that I will be **blocked** if I *intentionally* remove or skip any mandatory\* field

### Checklist

- [X] I'm reporting that yt-dlp is broken on a **supported** site
- [X] I've verified that I'm running yt-dlp version **2023.09.24** ([update instructions](https://github.com/yt-dlp/yt-dlp#update)) or later (specify commit)
- [X] I've checked that all provided URLs are playable in a browser with the same IP and same login details
- [X] I've checked that all URLs and arguments with special characters are [properly quoted or escaped](https://github.com/yt-dlp/yt-dlp/wiki/FAQ#video-url-contains-an-ampersand--and-im-getting-some-strange-output-1-2839-or-v-is-not-recognized-as-an-internal-or-external-command)
- [X] I've searched [known issues](https://github.com/yt-dlp/yt-dlp/issues/3766) and the [bugtracker](https://github.com/yt-dlp/yt-dlp/issues?q=) for similar issues **including closed ones**. DO NOT post duplicates
- [X] I've read the [guidelines for opening an issue](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#opening-an-issue)
- [X] I've read about [sharing account credentials](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#are-you-willing-to-share-account-details-if-needed) and I'm willing to share it if required

### Region

Any

### Provide a description that is worded well enough to be understood

Recently getting the following error when attempting to download from WU. Downloading the direct m3u8 file still works as expected

Failed to download watch JSON: HTTP Error 400: Bad Request

### Provide verbose output that clearly demonstrates the problem

- [X] Run **your** yt-dlp command with **-vU** flag added (`yt-dlp -vU <your command line>`)
- [X] If using API, add `'verbose': True` to `YoutubeDL` params instead
- [X] Copy the WHOLE output (starting with `[debug] Command-line config`) and insert it below

### Complete Verbose Output

```shell
[debug] Command-line config: ['--cookies-from-browser', 'firefox', 'https://www.wrestle-universe.com/en/videos/gSd8qh11PruLxnrDRd2gLF', '-vU']
Extracting cookies from firefox
[debug] Extracting cookies from: "/home/mike/.mozilla/firefox/1ks0sch7.default-release/cookies.sqlite"
Extracted 2243 cookies from firefox
[debug] Encodings: locale UTF-8, fs utf-8, pref UTF-8, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version nightly@2023.10.03.093359 [cc8d84415] (linux_exe)
[debug] Python 3.10.12 (CPython x86_64 64bit) - Linux-6.2.0-33-generic-x86_64-with-glibc2.35 (OpenSSL 3.1.3 19 Sep 2023, glibc 2.35)
[debug] exe versions: ffmpeg 4.4.2 (setts), ffprobe 4.4.2
[debug] Optional libraries: Cryptodome-3.19.0, brotli-1.1.0, certifi-2023.07.22, mutagen-1.47.0, sqlite3-3.43.0, websockets-11.0.3
[debug] Proxy map: {}
[debug] Loaded 1886 extractors
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp-nightly-builds/releases/latest
Available version: nightly@2023.10.03.093359, Current version: nightly@2023.10.03.093359
Current Build Hash: 7d2957cd47df3f8528cc83b9b634b821b350f83e5993339caa8401887ea1d6cc
yt-dlp is up to date (nightly@2023.10.03.093359)
[debug] Loading wrestleuniverse.device_id from cache
[WrestleUniverseVOD] Extracting URL: https://www.wrestle-universe.com/en/videos/gSd8qh11PruLxnrDRd2gLF
[WrestleUniverseVOD] gSd8qh11PruLxnrDRd2gLF: Downloading metadata JSON
[WrestleUniverseVOD] gSd8qh11PruLxnrDRd2gLF: Downloading watch JSON
ERROR: [WrestleUniverseVOD] gSd8qh11PruLxnrDRd2gLF: Failed to download watch JSON: HTTP Error 400: Bad Request (caused by <HTTPError 400: Bad Request>); please report this issue on  https://github.com/yt-dlp/yt-dlp/issues?q= , filling out the appropriate issue template. Confirm you are on the latest version using  yt-dlp -U
  File "yt_dlp/extractor/common.py", line 715, in extract
  File "yt_dlp/extractor/wrestleuniverse.py", line 193, in _real_extract
  File "yt_dlp/extractor/wrestleuniverse.py", line 119, in _call_api
  File "yt_dlp/extractor/common.py", line 1069, in download_content
  File "yt_dlp/extractor/common.py", line 1033, in download_handle
  File "yt_dlp/extractor/common.py", line 903, in _download_webpage_handle
  File "yt_dlp/extractor/common.py", line 860, in _request_webpage

  File "yt_dlp/networking/_urllib.py", line 410, in _send
  File "urllib/request.py", line 525, in open
  File "urllib/request.py", line 634, in http_response
  File "urllib/request.py", line 563, in error
  File "urllib/request.py", line 496, in _call_chain
  File "urllib/request.py", line 643, in http_error_default
urllib.error.HTTPError: HTTP Error 400: Bad Request

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "yt_dlp/YoutubeDL.py", line 4051, in urlopen
  File "yt_dlp/networking/common.py", line 114, in send
  File "yt_dlp/networking/_helper.py", line 204, in wrapper
  File "yt_dlp/networking/common.py", line 325, in send
  File "yt_dlp/networking/_urllib.py", line 415, in _send
yt_dlp.networking.exceptions.HTTPError: HTTP Error 400: Bad Request

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "yt_dlp/extractor/common.py", line 847, in _request_webpage
  File "yt_dlp/YoutubeDL.py", line 4070, in urlopen
yt_dlp.networking.exceptions._CompatHTTPError: HTTP Error 400: Bad Request
```



Discussion:

Resolving patch:
diff --git a/yt_dlp/extractor/wrestleuniverse.py b/yt_dlp/extractor/wrestleuniverse.py
--- a/yt_dlp/extractor/wrestleuniverse.py
+++ b/yt_dlp/extractor/wrestleuniverse.py
@@ -190,10 +190,7 @@ class WrestleUniverseVODIE(WrestleUniverseBaseIE):
     def _real_extract(self, url):
         lang, video_id = self._match_valid_url(url).group('lang', 'id')
         metadata = self._download_metadata(url, video_id, lang, 'videoEpisodeFallbackData')
-        video_data = self._call_api(video_id, ':watch', 'watch', data={
-            # 'deviceId' is required if ignoreDeviceRestriction is False
-            'ignoreDeviceRestriction': True,
-        })
+        video_data = self._call_api(video_id, ':watch', 'watch', data={'deviceId': self._DEVICE_ID})
 
         return {
             'id': video_id,


Test patch: