mirror of
				https://github.com/ytdl-org/youtube-dl.git
				synced 2025-10-29 09:26:20 -07:00 
			
		
		
		
	Add --prefer-insecure option (Fixes #2364)
This commit is contained in:
		| @@ -148,6 +148,8 @@ class YoutubeDL(object): | |||||||
|                        again. |                        again. | ||||||
|     cookiefile:        File name where cookies should be read from and dumped to. |     cookiefile:        File name where cookies should be read from and dumped to. | ||||||
|     nocheckcertificate:Do not verify SSL certificates |     nocheckcertificate:Do not verify SSL certificates | ||||||
|  |     prefer_insecure:   Use HTTP instead of HTTPS to retrieve information. | ||||||
|  |                        At the moment, this is only supported by YouTube. | ||||||
|     proxy:             URL of the proxy server to use |     proxy:             URL of the proxy server to use | ||||||
|     socket_timeout:    Time to wait for unresponsive hosts, in seconds |     socket_timeout:    Time to wait for unresponsive hosts, in seconds | ||||||
|     bidi_workaround:   Work around buggy terminals without bidirectional text |     bidi_workaround:   Work around buggy terminals without bidirectional text | ||||||
|   | |||||||
| @@ -237,6 +237,9 @@ def parseOpts(overrideArguments=None): | |||||||
|         '--proxy', dest='proxy', default=None, metavar='URL', |         '--proxy', dest='proxy', default=None, metavar='URL', | ||||||
|         help='Use the specified HTTP/HTTPS proxy. Pass in an empty string (--proxy "") for direct connection') |         help='Use the specified HTTP/HTTPS proxy. Pass in an empty string (--proxy "") for direct connection') | ||||||
|     general.add_option('--no-check-certificate', action='store_true', dest='no_check_certificate', default=False, help='Suppress HTTPS certificate validation.') |     general.add_option('--no-check-certificate', action='store_true', dest='no_check_certificate', default=False, help='Suppress HTTPS certificate validation.') | ||||||
|  |     general.add_option( | ||||||
|  |         '--prefer-insecure', action='store_true', dest='prefer_insecure', | ||||||
|  |         help='Use an unencrypted connection to retrieve information about the video. (Currently supported only for YouTube)') | ||||||
|     general.add_option( |     general.add_option( | ||||||
|         '--cache-dir', dest='cachedir', default=get_cachedir(), metavar='DIR', |         '--cache-dir', dest='cachedir', default=get_cachedir(), metavar='DIR', | ||||||
|         help='Location in the filesystem where youtube-dl can store some downloaded information permanently. By default $XDG_CACHE_HOME/youtube-dl or ~/.cache/youtube-dl . At the moment, only YouTube player files (for videos with obfuscated signatures) are cached, but that may change.') |         help='Location in the filesystem where youtube-dl can store some downloaded information permanently. By default $XDG_CACHE_HOME/youtube-dl or ~/.cache/youtube-dl . At the moment, only YouTube player files (for videos with obfuscated signatures) are cached, but that may change.') | ||||||
| @@ -257,7 +260,6 @@ def parseOpts(overrideArguments=None): | |||||||
|         action='store_true', |         action='store_true', | ||||||
|         help='Do not read configuration files. When given in the global configuration file /etc/youtube-dl.conf: do not read the user configuration in ~/.config/youtube-dl.conf (%APPDATA%/youtube-dl/config.txt on Windows)') |         help='Do not read configuration files. When given in the global configuration file /etc/youtube-dl.conf: do not read the user configuration in ~/.config/youtube-dl.conf (%APPDATA%/youtube-dl/config.txt on Windows)') | ||||||
|  |  | ||||||
|  |  | ||||||
|     selection.add_option( |     selection.add_option( | ||||||
|         '--playlist-start', |         '--playlist-start', | ||||||
|         dest='playliststart', metavar='NUMBER', default=1, type=int, |         dest='playliststart', metavar='NUMBER', default=1, type=int, | ||||||
| @@ -756,6 +758,7 @@ def _real_main(argv=None): | |||||||
|         'download_archive': download_archive_fn, |         'download_archive': download_archive_fn, | ||||||
|         'cookiefile': opts.cookiefile, |         'cookiefile': opts.cookiefile, | ||||||
|         'nocheckcertificate': opts.no_check_certificate, |         'nocheckcertificate': opts.no_check_certificate, | ||||||
|  |         'prefer_insecure': opts.prefer_insecure, | ||||||
|         'proxy': opts.proxy, |         'proxy': opts.proxy, | ||||||
|         'socket_timeout': opts.socket_timeout, |         'socket_timeout': opts.socket_timeout, | ||||||
|         'bidi_workaround': opts.bidi_workaround, |         'bidi_workaround': opts.bidi_workaround, | ||||||
|   | |||||||
| @@ -1130,14 +1130,18 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor): | |||||||
|         return self._download_webpage(url, video_id, note=u'Searching for annotations.', errnote=u'Unable to download video annotations.') |         return self._download_webpage(url, video_id, note=u'Searching for annotations.', errnote=u'Unable to download video annotations.') | ||||||
|  |  | ||||||
|     def _real_extract(self, url): |     def _real_extract(self, url): | ||||||
|  |         proto = ( | ||||||
|  |             u'http' if self._downloader.params.get('prefer_insecure', False) | ||||||
|  |             else u'https') | ||||||
|  |  | ||||||
|         # Extract original video URL from URL with redirection, like age verification, using next_url parameter |         # Extract original video URL from URL with redirection, like age verification, using next_url parameter | ||||||
|         mobj = re.search(self._NEXT_URL_RE, url) |         mobj = re.search(self._NEXT_URL_RE, url) | ||||||
|         if mobj: |         if mobj: | ||||||
|             url = 'https://www.youtube.com/' + compat_urllib_parse.unquote(mobj.group(1)).lstrip('/') |             url = proto + '://www.youtube.com/' + compat_urllib_parse.unquote(mobj.group(1)).lstrip('/') | ||||||
|         video_id = self.extract_id(url) |         video_id = self.extract_id(url) | ||||||
|  |  | ||||||
|         # Get video webpage |         # Get video webpage | ||||||
|         url = 'https://www.youtube.com/watch?v=%s&gl=US&hl=en&has_verified=1' % video_id |         url = proto + '://www.youtube.com/watch?v=%s&gl=US&hl=en&has_verified=1' % video_id | ||||||
|         video_webpage = self._download_webpage(url, video_id) |         video_webpage = self._download_webpage(url, video_id) | ||||||
|  |  | ||||||
|         # Attempt to extract SWF player URL |         # Attempt to extract SWF player URL | ||||||
| @@ -1162,7 +1166,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor): | |||||||
|                                                   'asv': 3, |                                                   'asv': 3, | ||||||
|                                                   'sts':'1588', |                                                   'sts':'1588', | ||||||
|                                                   }) |                                                   }) | ||||||
|             video_info_url = 'https://www.youtube.com/get_video_info?' + data |             video_info_url = proto + '://www.youtube.com/get_video_info?' + data | ||||||
|             video_info_webpage = self._download_webpage(video_info_url, video_id, |             video_info_webpage = self._download_webpage(video_info_url, video_id, | ||||||
|                                     note=False, |                                     note=False, | ||||||
|                                     errnote='unable to download video info webpage') |                                     errnote='unable to download video info webpage') | ||||||
| @@ -1170,7 +1174,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor): | |||||||
|         else: |         else: | ||||||
|             age_gate = False |             age_gate = False | ||||||
|             for el_type in ['&el=embedded', '&el=detailpage', '&el=vevo', '']: |             for el_type in ['&el=embedded', '&el=detailpage', '&el=vevo', '']: | ||||||
|                 video_info_url = ('https://www.youtube.com/get_video_info?&video_id=%s%s&ps=default&eurl=&gl=US&hl=en' |                 video_info_url = (proto + '://www.youtube.com/get_video_info?&video_id=%s%s&ps=default&eurl=&gl=US&hl=en' | ||||||
|                         % (video_id, el_type)) |                         % (video_id, el_type)) | ||||||
|                 video_info_webpage = self._download_webpage(video_info_url, video_id, |                 video_info_webpage = self._download_webpage(video_info_url, video_id, | ||||||
|                                         note=False, |                                         note=False, | ||||||
| @@ -1445,7 +1449,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor): | |||||||
|             'duration':     video_duration, |             'duration':     video_duration, | ||||||
|             'age_limit':    18 if age_gate else 0, |             'age_limit':    18 if age_gate else 0, | ||||||
|             'annotations':  video_annotations, |             'annotations':  video_annotations, | ||||||
|             'webpage_url': 'https://www.youtube.com/watch?v=%s' % video_id, |             'webpage_url': proto + '://www.youtube.com/watch?v=%s' % video_id, | ||||||
|             'view_count':   view_count, |             'view_count':   view_count, | ||||||
|             'like_count': like_count, |             'like_count': like_count, | ||||||
|             'dislike_count': dislike_count, |             'dislike_count': dislike_count, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user