3
from flexget.plugin import register_plugin, priority
5
log = logging.getLogger('headers')
8
class HTTPHeadersProcessor(urllib2.BaseHandler):
11
handler_order = urllib2.HTTPHandler.handler_order - 10
13
def __init__(self, headers=None):
15
self.headers = headers
19
def http_request(self, request):
20
for name, value in self.headers.iteritems():
21
if not request.has_header(name):
22
log.debug('Adding %s: %s' % (name, value))
23
request.add_unredirected_header(name.capitalize(), value.strip())
26
def http_response(self, request, response):
29
https_request = http_request
30
https_response = http_response
33
class PluginHeaders(object):
34
"""Allow setting up any headers in all requests (which use urllib2)
39
cookie: uid=<YOUR UID>; pass=<YOUR PASS>
43
from flexget import validator
44
config = validator.factory('dict')
45
config.accept_valid_keys('text', key_type='text')
49
def on_feed_start(self, feed, config):
51
# Set the headers for this feed's request session
52
if feed.requests.headers:
53
feed.requests.headers.update(config)
55
feed.requests.headers = config
56
# Set the headers in urllib2 for backwards compatibility
58
log.debug('Adding HTTPHeadersProcessor to default opener')
59
urllib2._opener.add_handler(HTTPHeadersProcessor(config))
61
log.debug('Creating new opener and installing it')
62
opener = urllib2.build_opener(HTTPHeadersProcessor(config))
63
urllib2.install_opener(opener)
65
def on_feed_exit(self, feed, config):
66
"""Feed exiting, remove additions"""
68
log.debug('Removing urllib2 default opener')
69
# TODO: this uninstalls all other handlers as well, but does it matter?
70
urllib2.install_opener(None)
72
on_feed_abort = on_feed_exit
74
register_plugin(PluginHeaders, 'headers', api_ver=2)