We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Unable to extract mp3Form form for InfoQ video
## Checklist

- [x] I'm reporting a broken site support
- [x] I've verified that I'm running youtube-dl version **2021.12.17**
- [x] I've checked that all provided URLs are alive and playable in a browser
- [x] I've checked that all URLs and arguments with special characters are properly quoted or escaped
- [x] I've searched the bugtracker for similar issues including closed ones


## Verbose log

```
$ youtube-dl  --verbose  'https://www.infoq.com/presentations/problems-async-arch/'
[debug] System config: []
[debug] User config: []
[debug] Custom config: []
[debug] Command-line args: ['--verbose', 'https://www.infoq.com/presentations/problems-async-arch/']
[debug] Encodings: locale UTF-8, fs utf-8, out utf-8, pref UTF-8
[debug] youtube-dl version 2021.12.17
[debug] Python version 3.10.5 (CPython) - macOS-12.5-x86_64-i386-64bit
[debug] exe versions: ffmpeg 5.1, ffprobe 5.1
[debug] Proxy map: {}
[InfoQ] problems-async-arch: Downloading webpage
ERROR: Unable to extract mp3Form form; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see  https://yt-dl.org/update  on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.
Traceback (most recent call last):
  File "/usr/local/Cellar/youtube-dl/2021.12.17/libexec/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 815, in wrapper
    return func(self, *args, **kwargs)
  File "/usr/local/Cellar/youtube-dl/2021.12.17/libexec/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 836, in __extract_info
    ie_result = ie.extract(url)
  File "/usr/local/Cellar/youtube-dl/2021.12.17/libexec/lib/python3.10/site-packages/youtube_dl/extractor/common.py", line 534, in extract
    ie_result = self._real_extract(url)
  File "/usr/local/Cellar/youtube-dl/2021.12.17/libexec/lib/python3.10/site-packages/youtube_dl/extractor/infoq.py", line 128, in _real_extract
    + self._extract_http_audio(webpage, video_id))
  File "/usr/local/Cellar/youtube-dl/2021.12.17/libexec/lib/python3.10/site-packages/youtube_dl/extractor/infoq.py", line 93, in _extract_http_audio
    fields = self._form_hidden_inputs('mp3Form', webpage)
  File "/usr/local/Cellar/youtube-dl/2021.12.17/libexec/lib/python3.10/site-packages/youtube_dl/extractor/common.py", line 1367, in _form_hidden_inputs
    form = self._search_regex(
  File "/usr/local/Cellar/youtube-dl/2021.12.17/libexec/lib/python3.10/site-packages/youtube_dl/extractor/common.py", line 1012, in _search_regex
    raise RegexNotFoundError('Unable to extract %s' % _name)
youtube_dl.utils.RegexNotFoundError: Unable to extract mp3Form form; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see  https://yt-dl.org/update  on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.
```


## Description

I can watch the video in a browser when I'm logged in or not. When downloading the video with youtube-dl, I get the error, "Unable to extract mp3Form form".


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `youtube_dl/extractor/infoq.py`
Content:
```
1 # coding: utf-8
2 
3 from __future__ import unicode_literals
4 
5 from ..compat import (
6     compat_b64decode,
7     compat_urllib_parse_unquote,
8     compat_urlparse,
9 )
10 from ..utils import (
11     determine_ext,
12     update_url_query,
13 )
14 from .bokecc import BokeCCBaseIE
15 
16 
17 class InfoQIE(BokeCCBaseIE):
18     _VALID_URL = r'https?://(?:www\.)?infoq\.com/(?:[^/]+/)+(?P<id>[^/]+)'
19 
20     _TESTS = [{
21         'url': 'http://www.infoq.com/presentations/A-Few-of-My-Favorite-Python-Things',
22         'md5': 'b5ca0e0a8c1fed93b0e65e48e462f9a2',
23         'info_dict': {
24             'id': 'A-Few-of-My-Favorite-Python-Things',
25             'ext': 'mp4',
26             'description': 'Mike Pirnat presents some tips and tricks, standard libraries and third party packages that make programming in Python a richer experience.',
27             'title': 'A Few of My Favorite [Python] Things',
28         },
29     }, {
30         'url': 'http://www.infoq.com/fr/presentations/changez-avis-sur-javascript',
31         'only_matching': True,
32     }, {
33         'url': 'http://www.infoq.com/cn/presentations/openstack-continued-delivery',
34         'md5': '4918d0cca1497f2244572caf626687ef',
35         'info_dict': {
36             'id': 'openstack-continued-delivery',
37             'title': 'OpenStack持续交付之路',
38             'ext': 'flv',
39             'description': 'md5:308d981fb28fa42f49f9568322c683ff',
40         },
41     }, {
42         'url': 'https://www.infoq.com/presentations/Simple-Made-Easy',
43         'md5': '0e34642d4d9ef44bf86f66f6399672db',
44         'info_dict': {
45             'id': 'Simple-Made-Easy',
46             'title': 'Simple Made Easy',
47             'ext': 'mp3',
48             'description': 'md5:3e0e213a8bbd074796ef89ea35ada25b',
49         },
50         'params': {
51             'format': 'bestaudio',
52         },
53     }]
54 
55     def _extract_rtmp_video(self, webpage):
56         # The server URL is hardcoded
57         video_url = 'rtmpe://videof.infoq.com/cfx/st/'
58 
59         # Extract video URL
60         encoded_id = self._search_regex(
61             r"jsclassref\s*=\s*'([^']*)'", webpage, 'encoded id', default=None)
62 
63         real_id = compat_urllib_parse_unquote(compat_b64decode(encoded_id).decode('utf-8'))
64         playpath = 'mp4:' + real_id
65 
66         return [{
67             'format_id': 'rtmp_video',
68             'url': video_url,
69             'ext': determine_ext(playpath),
70             'play_path': playpath,
71         }]
72 
73     def _extract_cf_auth(self, webpage):
74         policy = self._search_regex(r'InfoQConstants\.scp\s*=\s*\'([^\']+)\'', webpage, 'policy')
75         signature = self._search_regex(r'InfoQConstants\.scs\s*=\s*\'([^\']+)\'', webpage, 'signature')
76         key_pair_id = self._search_regex(r'InfoQConstants\.sck\s*=\s*\'([^\']+)\'', webpage, 'key-pair-id')
77         return {
78             'Policy': policy,
79             'Signature': signature,
80             'Key-Pair-Id': key_pair_id,
81         }
82 
83     def _extract_http_video(self, webpage):
84         http_video_url = self._search_regex(r'P\.s\s*=\s*\'([^\']+)\'', webpage, 'video URL')
85         http_video_url = update_url_query(http_video_url, self._extract_cf_auth(webpage))
86         return [{
87             'format_id': 'http_video',
88             'url': http_video_url,
89             'http_headers': {'Referer': 'https://www.infoq.com/'},
90         }]
91 
92     def _extract_http_audio(self, webpage, video_id):
93         fields = self._form_hidden_inputs('mp3Form', webpage)
94         http_audio_url = fields.get('filename')
95         if not http_audio_url:
96             return []
97 
98         # base URL is found in the Location header in the response returned by
99         # GET https://www.infoq.com/mp3download.action?filename=... when logged in.
100         http_audio_url = compat_urlparse.urljoin('http://ress.infoq.com/downloads/mp3downloads/', http_audio_url)
101         http_audio_url = update_url_query(http_audio_url, self._extract_cf_auth(webpage))
102 
103         # audio file seem to be missing some times even if there is a download link
104         # so probe URL to make sure
105         if not self._is_valid_url(http_audio_url, video_id):
106             return []
107 
108         return [{
109             'format_id': 'http_audio',
110             'url': http_audio_url,
111             'vcodec': 'none',
112         }]
113 
114     def _real_extract(self, url):
115         video_id = self._match_id(url)
116         webpage = self._download_webpage(url, video_id)
117 
118         video_title = self._html_search_regex(r'<title>(.*?)</title>', webpage, 'title')
119         video_description = self._html_search_meta('description', webpage, 'description')
120 
121         if '/cn/' in url:
122             # for China videos, HTTP video URL exists but always fails with 403
123             formats = self._extract_bokecc_formats(webpage, video_id)
124         else:
125             formats = (
126                 self._extract_rtmp_video(webpage)
127                 + self._extract_http_video(webpage)
128                 + self._extract_http_audio(webpage, video_id))
129 
130         self._sort_formats(formats)
131 
132         return {
133             'id': video_id,
134             'title': video_title,
135             'description': video_description,
136             'formats': formats,
137         }
138
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/youtube_dl/extractor/infoq.py b/youtube_dl/extractor/infoq.py
--- a/youtube_dl/extractor/infoq.py
+++ b/youtube_dl/extractor/infoq.py
@@ -1,6 +1,9 @@
 # coding: utf-8
 
 from __future__ import unicode_literals
+from ..utils import (
+    ExtractorError,
+)
 
 from ..compat import (
     compat_b64decode,
@@ -90,7 +93,11 @@
         }]
 
     def _extract_http_audio(self, webpage, video_id):
-        fields = self._form_hidden_inputs('mp3Form', webpage)
+        try:
+            fields = self._form_hidden_inputs('mp3Form', webpage)
+        except ExtractorError:
+            fields = {}
+
         http_audio_url = fields.get('filename')
         if not http_audio_url:
             return []

{"golden_diff": "diff --git a/youtube_dl/extractor/infoq.py b/youtube_dl/extractor/infoq.py\n--- a/youtube_dl/extractor/infoq.py\n+++ b/youtube_dl/extractor/infoq.py\n@@ -1,6 +1,9 @@\n # coding: utf-8\n \n from __future__ import unicode_literals\n+from ..utils import (\n+    ExtractorError,\n+)\n \n from ..compat import (\n     compat_b64decode,\n@@ -90,7 +93,11 @@\n         }]\n \n     def _extract_http_audio(self, webpage, video_id):\n-        fields = self._form_hidden_inputs('mp3Form', webpage)\n+        try:\n+            fields = self._form_hidden_inputs('mp3Form', webpage)\n+        except ExtractorError:\n+            fields = {}\n+\n         http_audio_url = fields.get('filename')\n         if not http_audio_url:\n             return []\n", "issue": "Unable to extract mp3Form form for InfoQ video\n## Checklist\r\n\r\n- [x] I'm reporting a broken site support\r\n- [x] I've verified that I'm running youtube-dl version **2021.12.17**\r\n- [x] I've checked that all provided URLs are alive and playable in a browser\r\n- [x] I've checked that all URLs and arguments with special characters are properly quoted or escaped\r\n- [x] I've searched the bugtracker for similar issues including closed ones\r\n\r\n\r\n## Verbose log\r\n\r\n```\r\n$ youtube-dl  --verbose  'https://www.infoq.com/presentations/problems-async-arch/'\r\n[debug] System config: []\r\n[debug] User config: []\r\n[debug] Custom config: []\r\n[debug] Command-line args: ['--verbose', 'https://www.infoq.com/presentations/problems-async-arch/']\r\n[debug] Encodings: locale UTF-8, fs utf-8, out utf-8, pref UTF-8\r\n[debug] youtube-dl version 2021.12.17\r\n[debug] Python version 3.10.5 (CPython) - macOS-12.5-x86_64-i386-64bit\r\n[debug] exe versions: ffmpeg 5.1, ffprobe 5.1\r\n[debug] Proxy map: {}\r\n[InfoQ] problems-async-arch: Downloading webpage\r\nERROR: Unable to extract mp3Form form; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see  https://yt-dl.org/update  on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.\r\nTraceback (most recent call last):\r\n  File \"/usr/local/Cellar/youtube-dl/2021.12.17/libexec/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py\", line 815, in wrapper\r\n    return func(self, *args, **kwargs)\r\n  File \"/usr/local/Cellar/youtube-dl/2021.12.17/libexec/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py\", line 836, in __extract_info\r\n    ie_result = ie.extract(url)\r\n  File \"/usr/local/Cellar/youtube-dl/2021.12.17/libexec/lib/python3.10/site-packages/youtube_dl/extractor/common.py\", line 534, in extract\r\n    ie_result = self._real_extract(url)\r\n  File \"/usr/local/Cellar/youtube-dl/2021.12.17/libexec/lib/python3.10/site-packages/youtube_dl/extractor/infoq.py\", line 128, in _real_extract\r\n    + self._extract_http_audio(webpage, video_id))\r\n  File \"/usr/local/Cellar/youtube-dl/2021.12.17/libexec/lib/python3.10/site-packages/youtube_dl/extractor/infoq.py\", line 93, in _extract_http_audio\r\n    fields = self._form_hidden_inputs('mp3Form', webpage)\r\n  File \"/usr/local/Cellar/youtube-dl/2021.12.17/libexec/lib/python3.10/site-packages/youtube_dl/extractor/common.py\", line 1367, in _form_hidden_inputs\r\n    form = self._search_regex(\r\n  File \"/usr/local/Cellar/youtube-dl/2021.12.17/libexec/lib/python3.10/site-packages/youtube_dl/extractor/common.py\", line 1012, in _search_regex\r\n    raise RegexNotFoundError('Unable to extract %s' % _name)\r\nyoutube_dl.utils.RegexNotFoundError: Unable to extract mp3Form form; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see  https://yt-dl.org/update  on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.\r\n```\r\n\r\n\r\n## Description\r\n\r\nI can watch the video in a browser when I'm logged in or not. When downloading the video with youtube-dl, I get the error, \"Unable to extract mp3Form form\".\r\n\n", "before_files": [{"content": "# coding: utf-8\n\nfrom __future__ import unicode_literals\n\nfrom ..compat import (\n    compat_b64decode,\n    compat_urllib_parse_unquote,\n    compat_urlparse,\n)\nfrom ..utils import (\n    determine_ext,\n    update_url_query,\n)\nfrom .bokecc import BokeCCBaseIE\n\n\nclass InfoQIE(BokeCCBaseIE):\n    _VALID_URL = r'https?://(?:www\\.)?infoq\\.com/(?:[^/]+/)+(?P<id>[^/]+)'\n\n    _TESTS = [{\n        'url': 'http://www.infoq.com/presentations/A-Few-of-My-Favorite-Python-Things',\n        'md5': 'b5ca0e0a8c1fed93b0e65e48e462f9a2',\n        'info_dict': {\n            'id': 'A-Few-of-My-Favorite-Python-Things',\n            'ext': 'mp4',\n            'description': 'Mike Pirnat presents some tips and tricks, standard libraries and third party packages that make programming in Python a richer experience.',\n            'title': 'A Few of My Favorite [Python] Things',\n        },\n    }, {\n        'url': 'http://www.infoq.com/fr/presentations/changez-avis-sur-javascript',\n        'only_matching': True,\n    }, {\n        'url': 'http://www.infoq.com/cn/presentations/openstack-continued-delivery',\n        'md5': '4918d0cca1497f2244572caf626687ef',\n        'info_dict': {\n            'id': 'openstack-continued-delivery',\n            'title': 'OpenStack\u6301\u7eed\u4ea4\u4ed8\u4e4b\u8def',\n            'ext': 'flv',\n            'description': 'md5:308d981fb28fa42f49f9568322c683ff',\n        },\n    }, {\n        'url': 'https://www.infoq.com/presentations/Simple-Made-Easy',\n        'md5': '0e34642d4d9ef44bf86f66f6399672db',\n        'info_dict': {\n            'id': 'Simple-Made-Easy',\n            'title': 'Simple Made Easy',\n            'ext': 'mp3',\n            'description': 'md5:3e0e213a8bbd074796ef89ea35ada25b',\n        },\n        'params': {\n            'format': 'bestaudio',\n        },\n    }]\n\n    def _extract_rtmp_video(self, webpage):\n        # The server URL is hardcoded\n        video_url = 'rtmpe://videof.infoq.com/cfx/st/'\n\n        # Extract video URL\n        encoded_id = self._search_regex(\n            r\"jsclassref\\s*=\\s*'([^']*)'\", webpage, 'encoded id', default=None)\n\n        real_id = compat_urllib_parse_unquote(compat_b64decode(encoded_id).decode('utf-8'))\n        playpath = 'mp4:' + real_id\n\n        return [{\n            'format_id': 'rtmp_video',\n            'url': video_url,\n            'ext': determine_ext(playpath),\n            'play_path': playpath,\n        }]\n\n    def _extract_cf_auth(self, webpage):\n        policy = self._search_regex(r'InfoQConstants\\.scp\\s*=\\s*\\'([^\\']+)\\'', webpage, 'policy')\n        signature = self._search_regex(r'InfoQConstants\\.scs\\s*=\\s*\\'([^\\']+)\\'', webpage, 'signature')\n        key_pair_id = self._search_regex(r'InfoQConstants\\.sck\\s*=\\s*\\'([^\\']+)\\'', webpage, 'key-pair-id')\n        return {\n            'Policy': policy,\n            'Signature': signature,\n            'Key-Pair-Id': key_pair_id,\n        }\n\n    def _extract_http_video(self, webpage):\n        http_video_url = self._search_regex(r'P\\.s\\s*=\\s*\\'([^\\']+)\\'', webpage, 'video URL')\n        http_video_url = update_url_query(http_video_url, self._extract_cf_auth(webpage))\n        return [{\n            'format_id': 'http_video',\n            'url': http_video_url,\n            'http_headers': {'Referer': 'https://www.infoq.com/'},\n        }]\n\n    def _extract_http_audio(self, webpage, video_id):\n        fields = self._form_hidden_inputs('mp3Form', webpage)\n        http_audio_url = fields.get('filename')\n        if not http_audio_url:\n            return []\n\n        # base URL is found in the Location header in the response returned by\n        # GET https://www.infoq.com/mp3download.action?filename=... when logged in.\n        http_audio_url = compat_urlparse.urljoin('http://ress.infoq.com/downloads/mp3downloads/', http_audio_url)\n        http_audio_url = update_url_query(http_audio_url, self._extract_cf_auth(webpage))\n\n        # audio file seem to be missing some times even if there is a download link\n        # so probe URL to make sure\n        if not self._is_valid_url(http_audio_url, video_id):\n            return []\n\n        return [{\n            'format_id': 'http_audio',\n            'url': http_audio_url,\n            'vcodec': 'none',\n        }]\n\n    def _real_extract(self, url):\n        video_id = self._match_id(url)\n        webpage = self._download_webpage(url, video_id)\n\n        video_title = self._html_search_regex(r'<title>(.*?)</title>', webpage, 'title')\n        video_description = self._html_search_meta('description', webpage, 'description')\n\n        if '/cn/' in url:\n            # for China videos, HTTP video URL exists but always fails with 403\n            formats = self._extract_bokecc_formats(webpage, video_id)\n        else:\n            formats = (\n                self._extract_rtmp_video(webpage)\n                + self._extract_http_video(webpage)\n                + self._extract_http_audio(webpage, video_id))\n\n        self._sort_formats(formats)\n\n        return {\n            'id': video_id,\n            'title': video_title,\n            'description': video_description,\n            'formats': formats,\n        }\n", "path": "youtube_dl/extractor/infoq.py"}], "after_files": [{"content": "# coding: utf-8\n\nfrom __future__ import unicode_literals\nfrom ..utils import (\n    ExtractorError,\n)\n\nfrom ..compat import (\n    compat_b64decode,\n    compat_urllib_parse_unquote,\n    compat_urlparse,\n)\nfrom ..utils import (\n    determine_ext,\n    update_url_query,\n)\nfrom .bokecc import BokeCCBaseIE\n\n\nclass InfoQIE(BokeCCBaseIE):\n    _VALID_URL = r'https?://(?:www\\.)?infoq\\.com/(?:[^/]+/)+(?P<id>[^/]+)'\n\n    _TESTS = [{\n        'url': 'http://www.infoq.com/presentations/A-Few-of-My-Favorite-Python-Things',\n        'md5': 'b5ca0e0a8c1fed93b0e65e48e462f9a2',\n        'info_dict': {\n            'id': 'A-Few-of-My-Favorite-Python-Things',\n            'ext': 'mp4',\n            'description': 'Mike Pirnat presents some tips and tricks, standard libraries and third party packages that make programming in Python a richer experience.',\n            'title': 'A Few of My Favorite [Python] Things',\n        },\n    }, {\n        'url': 'http://www.infoq.com/fr/presentations/changez-avis-sur-javascript',\n        'only_matching': True,\n    }, {\n        'url': 'http://www.infoq.com/cn/presentations/openstack-continued-delivery',\n        'md5': '4918d0cca1497f2244572caf626687ef',\n        'info_dict': {\n            'id': 'openstack-continued-delivery',\n            'title': 'OpenStack\u6301\u7eed\u4ea4\u4ed8\u4e4b\u8def',\n            'ext': 'flv',\n            'description': 'md5:308d981fb28fa42f49f9568322c683ff',\n        },\n    }, {\n        'url': 'https://www.infoq.com/presentations/Simple-Made-Easy',\n        'md5': '0e34642d4d9ef44bf86f66f6399672db',\n        'info_dict': {\n            'id': 'Simple-Made-Easy',\n            'title': 'Simple Made Easy',\n            'ext': 'mp3',\n            'description': 'md5:3e0e213a8bbd074796ef89ea35ada25b',\n        },\n        'params': {\n            'format': 'bestaudio',\n        },\n    }]\n\n    def _extract_rtmp_video(self, webpage):\n        # The server URL is hardcoded\n        video_url = 'rtmpe://videof.infoq.com/cfx/st/'\n\n        # Extract video URL\n        encoded_id = self._search_regex(\n            r\"jsclassref\\s*=\\s*'([^']*)'\", webpage, 'encoded id', default=None)\n\n        real_id = compat_urllib_parse_unquote(compat_b64decode(encoded_id).decode('utf-8'))\n        playpath = 'mp4:' + real_id\n\n        return [{\n            'format_id': 'rtmp_video',\n            'url': video_url,\n            'ext': determine_ext(playpath),\n            'play_path': playpath,\n        }]\n\n    def _extract_cf_auth(self, webpage):\n        policy = self._search_regex(r'InfoQConstants\\.scp\\s*=\\s*\\'([^\\']+)\\'', webpage, 'policy')\n        signature = self._search_regex(r'InfoQConstants\\.scs\\s*=\\s*\\'([^\\']+)\\'', webpage, 'signature')\n        key_pair_id = self._search_regex(r'InfoQConstants\\.sck\\s*=\\s*\\'([^\\']+)\\'', webpage, 'key-pair-id')\n        return {\n            'Policy': policy,\n            'Signature': signature,\n            'Key-Pair-Id': key_pair_id,\n        }\n\n    def _extract_http_video(self, webpage):\n        http_video_url = self._search_regex(r'P\\.s\\s*=\\s*\\'([^\\']+)\\'', webpage, 'video URL')\n        http_video_url = update_url_query(http_video_url, self._extract_cf_auth(webpage))\n        return [{\n            'format_id': 'http_video',\n            'url': http_video_url,\n            'http_headers': {'Referer': 'https://www.infoq.com/'},\n        }]\n\n    def _extract_http_audio(self, webpage, video_id):\n        try:\n            fields = self._form_hidden_inputs('mp3Form', webpage)\n        except ExtractorError:\n            fields = {}\n\n        http_audio_url = fields.get('filename')\n        if not http_audio_url:\n            return []\n\n        # base URL is found in the Location header in the response returned by\n        # GET https://www.infoq.com/mp3download.action?filename=... when logged in.\n        http_audio_url = compat_urlparse.urljoin('http://ress.infoq.com/downloads/mp3downloads/', http_audio_url)\n        http_audio_url = update_url_query(http_audio_url, self._extract_cf_auth(webpage))\n\n        # audio file seem to be missing some times even if there is a download link\n        # so probe URL to make sure\n        if not self._is_valid_url(http_audio_url, video_id):\n            return []\n\n        return [{\n            'format_id': 'http_audio',\n            'url': http_audio_url,\n            'vcodec': 'none',\n        }]\n\n    def _real_extract(self, url):\n        video_id = self._match_id(url)\n        webpage = self._download_webpage(url, video_id)\n\n        video_title = self._html_search_regex(r'<title>(.*?)</title>', webpage, 'title')\n        video_description = self._html_search_meta('description', webpage, 'description')\n\n        if '/cn/' in url:\n            # for China videos, HTTP video URL exists but always fails with 403\n            formats = self._extract_bokecc_formats(webpage, video_id)\n        else:\n            formats = (\n                self._extract_rtmp_video(webpage)\n                + self._extract_http_video(webpage)\n                + self._extract_http_audio(webpage, video_id))\n\n        self._sort_formats(formats)\n\n        return {\n            'id': video_id,\n            'title': video_title,\n            'description': video_description,\n            'formats': formats,\n        }\n", "path": "youtube_dl/extractor/infoq.py"}]}