diff --git a/plugins/Web/plugin.py b/plugins/Web/plugin.py index fe76e241c..f464fcbee 100644 --- a/plugins/Web/plugin.py +++ b/plugins/Web/plugin.py @@ -149,14 +149,7 @@ class Web(callbacks.PluginRegexp): def getTitle(self, irc, url, raiseErrors, msg): size = conf.supybot.protocols.http.peekSize() timeout = self.registryValue('timeout') - headers = dict(utils.web.defaultHeaders) - language = conf.supybot.protocols.http.requestLanguage.getSpecific( - irc.network, msg.channel)() - lkey = 'Accept-Language' - if language: - headers[lkey] = language - elif lkey in headers: - del headers[lkey] + headers = conf.defaultHttpHeaders(irc.network, msg.channel) try: (target, text) = utils.web.getUrlTargetAndContent(url, size=size, timeout=timeout, headers=headers) diff --git a/src/conf.py b/src/conf.py index 421e77f7d..ba2db3678 100644 --- a/src/conf.py +++ b/src/conf.py @@ -1299,16 +1299,26 @@ registerGlobalValue(supybot.protocols.http, 'proxy', through. The value should be of the form 'host:port'."""))) utils.web.proxy = supybot.protocols.http.proxy +def defaultHttpHeaders(network, channel): + """Returns the default HTTP headers to use for this channel/network.""" + headers = utils.web.baseDefaultHeaders.copy() + try: + language = supybot.protocols.http.requestLanguage.getSpecific( + network, channel)() + except registry.NonExistentRegistryEntry: + pass # Starting up; language will be set by HttpRequestLanguage later + else: + if language: + headers['Accept-Language'] = language + elif 'Accept-Language' in headers: + del headers['Accept-Language'] + return headers + class HttpRequestLanguage(registry.String): """Must be a valid HTTP Accept-Language value.""" __slots__ = () def setValue(self, v): - headers = utils.web.defaultHeaders - lkey = 'Accept-Language' - if v: - headers[lkey] = v - elif lkey in headers: - del headers[lkey] + utils.web.defaultHeaders = defaultHttpHeaders(None, None) super(HttpRequestLanguage, self).setValue(v) registerChannelValue(supybot.protocols.http, 'requestLanguage', diff --git a/src/utils/web.py b/src/utils/web.py index 139bde9ce..923a25a43 100644 --- a/src/utils/web.py +++ b/src/utils/web.py @@ -115,10 +115,14 @@ def strError(e): else: return str(e) -defaultHeaders = { +# Used to build defaultHeaders +baseDefaultHeaders = { 'User-agent': 'Mozilla/5.0 (compatible; utils.web python module)' } +# overridable by other modules/plugins. +defaultHeaders = baseDefaultHeaders.copy() + # Other modules should feel free to replace this with an appropriate # application-specific function. Feel free to use a callable here. proxy = None