Pārlūkot izejas kodu

Add new --print-traffic option

Philipp Hagemeister 11 gadi atpakaļ
vecāks
revīzija
a0ddb8a2fa
3 mainītis faili ar 14 papildinājumiem un 6 dzēšanām
  1. 6 2
      youtube_dl/YoutubeDL.py
  2. 4 1
      youtube_dl/__init__.py
  3. 4 3
      youtube_dl/utils.py

+ 6 - 2
youtube_dl/YoutubeDL.py

@@ -148,6 +148,7 @@ class YoutubeDL(object):
     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
                        support, using fridibi
                        support, using fridibi
+    debug_printtraffic:Print out sent and received HTTP traffic
 
 
     The following parameters are not used by YoutubeDL itself, they are used by
     The following parameters are not used by YoutubeDL itself, they are used by
     the FileDownloader:
     the FileDownloader:
@@ -1124,10 +1125,13 @@ class YoutubeDL(object):
             if 'http' in proxies and 'https' not in proxies:
             if 'http' in proxies and 'https' not in proxies:
                 proxies['https'] = proxies['http']
                 proxies['https'] = proxies['http']
         proxy_handler = compat_urllib_request.ProxyHandler(proxies)
         proxy_handler = compat_urllib_request.ProxyHandler(proxies)
+
+        debuglevel = 1 if self.params.get('debug_printtraffic') else 0
         https_handler = make_HTTPS_handler(
         https_handler = make_HTTPS_handler(
-            self.params.get('nocheckcertificate', False))
+            self.params.get('nocheckcertificate', False), debuglevel=debuglevel)
+        ydlh = YoutubeDLHandler(debuglevel=debuglevel)
         opener = compat_urllib_request.build_opener(
         opener = compat_urllib_request.build_opener(
-            https_handler, proxy_handler, cookie_processor, YoutubeDLHandler())
+            https_handler, proxy_handler, cookie_processor, ydlh)
         # Delete the default user-agent header, which would otherwise apply in
         # Delete the default user-agent header, which would otherwise apply in
         # cases where our custom HTTP handler doesn't come into play
         # cases where our custom HTTP handler doesn't come into play
         # (See https://github.com/rg3/youtube-dl/issues/1309 for details)
         # (See https://github.com/rg3/youtube-dl/issues/1309 for details)

+ 4 - 1
youtube_dl/__init__.py

@@ -334,7 +334,9 @@ def parseOpts(overrideArguments=None):
     verbosity.add_option('--youtube-print-sig-code',
     verbosity.add_option('--youtube-print-sig-code',
             action='store_true', dest='youtube_print_sig_code', default=False,
             action='store_true', dest='youtube_print_sig_code', default=False,
             help=optparse.SUPPRESS_HELP)
             help=optparse.SUPPRESS_HELP)
-
+    verbosity.add_option('--print-traffic',
+            dest='debug_printtraffic', action='store_true', default=False,
+            help=optparse.SUPPRESS_HELP)
 
 
     filesystem.add_option('-t', '--title',
     filesystem.add_option('-t', '--title',
             action='store_true', dest='usetitle', help='use title in file name (default)', default=False)
             action='store_true', dest='usetitle', help='use title in file name (default)', default=False)
@@ -696,6 +698,7 @@ def _real_main(argv=None):
         '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,
+        'debug_printtraffic': opts.debug_printtraffic,
     }
     }
 
 
     with YoutubeDL(ydl_opts) as ydl:
     with YoutubeDL(ydl_opts) as ydl:

+ 4 - 3
youtube_dl/utils.py

@@ -539,7 +539,8 @@ def formatSeconds(secs):
     else:
     else:
         return '%d' % secs
         return '%d' % secs
 
 
-def make_HTTPS_handler(opts_no_check_certificate):
+
+def make_HTTPS_handler(opts_no_check_certificate, **kwargs):
     if sys.version_info < (3, 2):
     if sys.version_info < (3, 2):
         import httplib
         import httplib
 
 
@@ -560,7 +561,7 @@ def make_HTTPS_handler(opts_no_check_certificate):
         class HTTPSHandlerV3(compat_urllib_request.HTTPSHandler):
         class HTTPSHandlerV3(compat_urllib_request.HTTPSHandler):
             def https_open(self, req):
             def https_open(self, req):
                 return self.do_open(HTTPSConnectionV3, req)
                 return self.do_open(HTTPSConnectionV3, req)
-        return HTTPSHandlerV3()
+        return HTTPSHandlerV3(**kwargs)
     else:
     else:
         context = ssl.SSLContext(ssl.PROTOCOL_SSLv3)
         context = ssl.SSLContext(ssl.PROTOCOL_SSLv3)
         context.verify_mode = (ssl.CERT_NONE
         context.verify_mode = (ssl.CERT_NONE
@@ -571,7 +572,7 @@ def make_HTTPS_handler(opts_no_check_certificate):
             context.load_default_certs()
             context.load_default_certs()
         except AttributeError:
         except AttributeError:
             pass  # Python < 3.4
             pass  # Python < 3.4
-        return compat_urllib_request.HTTPSHandler(context=context)
+        return compat_urllib_request.HTTPSHandler(context=context, **kwargs)
 
 
 class ExtractorError(Exception):
 class ExtractorError(Exception):
     """Error during info extraction."""
     """Error during info extraction."""