From 9ce0c47cd461fe0eca841c0411ed3a56dc8707ab Mon Sep 17 00:00:00 2001 From: Ruud Date: Fri, 14 Jun 2013 16:03:02 +0200 Subject: [PATCH] More login fixes --- couchpotato/core/plugins/base.py | 17 +++++++++++++++-- couchpotato/core/providers/base.py | 12 ++++-------- .../core/providers/torrent/passthepopcorn/main.py | 17 ++++------------- couchpotato/core/providers/torrent/sceneaccess/main.py | 5 +---- couchpotato/core/providers/torrent/scenehd/main.py | 4 ---- 5 files changed, 24 insertions(+), 31 deletions(-) diff --git a/couchpotato/core/plugins/base.py b/couchpotato/core/plugins/base.py index bb154f5..43aa93d 100644 --- a/couchpotato/core/plugins/base.py +++ b/couchpotato/core/plugins/base.py @@ -114,6 +114,8 @@ class Plugin(object): headers['Host'] = headers.get('Host', host) headers['User-Agent'] = headers.get('User-Agent', self.user_agent) headers['Accept-encoding'] = headers.get('Accept-encoding', 'gzip') + headers['Connection'] = headers.get('Connection', 'keep-alive') + headers['Cache-Control'] = headers.get('Cache-Control', 'max-age=0') # Don't try for failed requests if self.http_failed_disabled.get(host, 0) > 0: @@ -130,6 +132,10 @@ class Plugin(object): self.wait(host) try: + # Make sure opener has the correct headers + if opener: + opener.add_headers = headers + if multipart: log.info('Opening multipart url: %s, params: %s', (url, [x for x in params.iterkeys()] if isinstance(params, dict) else 'with data')) request = urllib2.Request(url, params, headers) @@ -143,7 +149,12 @@ class Plugin(object): response = opener.open(request, timeout = timeout) else: log.info('Opening url: %s, params: %s', (url, [x for x in params.iterkeys()] if isinstance(params, dict) else 'with data')) - data = tryUrlencode(params) if len(params) > 0 else None + + if isinstance(params, (str, unicode)) and len(params) > 0: + data = params + else: + data = tryUrlencode(params) if len(params) > 0 else None + request = urllib2.Request(url, data, headers) if opener: @@ -156,8 +167,10 @@ class Plugin(object): buf = StringIO(response.read()) f = gzip.GzipFile(fileobj = buf) data = f.read() + f.close() else: data = response.read() + response.close() self.http_failed_request[host] = 0 except IOError: @@ -230,7 +243,7 @@ class Plugin(object): def getCache(self, cache_key, url = None, **kwargs): cache_key = md5(ss(cache_key)) - cache = Env.get('cache').get(cache_key) + cache = None #Env.get('cache').get(cache_key) if cache: if not Env.get('dev'): log.debug('Getting cache %s', cache_key) return cache diff --git a/couchpotato/core/providers/base.py b/couchpotato/core/providers/base.py index 47db3c8..9f0412a 100644 --- a/couchpotato/core/providers/base.py +++ b/couchpotato/core/providers/base.py @@ -106,7 +106,7 @@ class YarrProvider(Provider): now = time.time() if self.login_opener and self.last_login_check < (now - 3600): try: - output = self.urlopen(self.urls['login_check']) + output = self.urlopen(self.urls['login_check'], opener = self.login_opener) if self.loginCheckSuccess(output): self.last_login_check = now return True @@ -121,14 +121,10 @@ class YarrProvider(Provider): try: cookiejar = cookielib.CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar)) - opener.addheaders = [('User-Agent', self.user_agent)] - urllib2.install_opener(opener) - log.info2('Logging into %s', self.urls['login']) - f = opener.open(self.urls['login'], self.getLoginParams()) - output = f.read() - f.close() + output = self.urlopen(self.urls['login'], params = self.getLoginParams(), opener = opener) if self.loginSuccess(output): + self.last_login_check = now self.login_opener = opener return True @@ -171,7 +167,7 @@ class YarrProvider(Provider): return [] # Login if needed - if self.urls.get('login') and (not self.login_opener and not self.login()): + if self.urls.get('login') and not self.login(): log.error('Failed to login to: %s', self.getName()) return [] diff --git a/couchpotato/core/providers/torrent/passthepopcorn/main.py b/couchpotato/core/providers/torrent/passthepopcorn/main.py index 8a75ec5..0d6e5f0 100644 --- a/couchpotato/core/providers/torrent/passthepopcorn/main.py +++ b/couchpotato/core/providers/torrent/passthepopcorn/main.py @@ -3,13 +3,11 @@ from couchpotato.core.helpers.variable import getTitle, tryInt, mergeDicts from couchpotato.core.logger import CPLog from couchpotato.core.providers.torrent.base import TorrentProvider from dateutil.parser import parse -import cookielib import htmlentitydefs import json import re import time import traceback -import urllib2 log = CPLog(__name__) @@ -25,6 +23,8 @@ class PassThePopcorn(TorrentProvider): 'search': 'https://tls.passthepopcorn.me/search/%s/0/7/%d' } + http_time_between_calls = 2 + quality_search_params = { 'bd50': {'media': 'Blu-ray', 'format': 'BD50'}, '1080p': {'resolution': '1080p'}, @@ -64,17 +64,8 @@ class PassThePopcorn(TorrentProvider): 'searchstr': movie['library']['identifier'] }) - # Do login for the cookies - if not self.login(): - return - - try: - url = '%s?json=noredirect&%s' % (self.urls['torrent'], tryUrlencode(params)) - txt = self.urlopen(url, opener = self.login_opener) - res = json.loads(txt) - except: - log.error('Search on PassThePopcorn.me (%s) failed (could not decode JSON)', params) - return + url = '%s?json=noredirect&%s' % (self.urls['torrent'], tryUrlencode(params)) + res = self.getJsonData(url, opener = self.login_opener) try: if not 'Movies' in res: diff --git a/couchpotato/core/providers/torrent/sceneaccess/main.py b/couchpotato/core/providers/torrent/sceneaccess/main.py index 67e4447..46d4ea4 100644 --- a/couchpotato/core/providers/torrent/sceneaccess/main.py +++ b/couchpotato/core/providers/torrent/sceneaccess/main.py @@ -13,7 +13,7 @@ class SceneAccess(TorrentProvider): urls = { 'test': 'https://www.sceneaccess.eu/', 'login': 'https://www.sceneaccess.eu/login', - 'login_check': 'https://sceneaccess.eu/inbox', + 'login_check': 'https://www.sceneaccess.eu/inbox', 'detail': 'https://www.sceneaccess.eu/details?id=%s', 'search': 'https://www.sceneaccess.eu/browse?method=2&c%d=%d', 'download': 'https://www.sceneaccess.eu/%s', @@ -40,9 +40,6 @@ class SceneAccess(TorrentProvider): }) url = "%s&%s" % (url, arguments) - # Do login for the cookies - if not self.login(): - return data = self.getHTMLData(url, opener = self.login_opener) diff --git a/couchpotato/core/providers/torrent/scenehd/main.py b/couchpotato/core/providers/torrent/scenehd/main.py index 89fbad7..b7d5b92 100644 --- a/couchpotato/core/providers/torrent/scenehd/main.py +++ b/couchpotato/core/providers/torrent/scenehd/main.py @@ -29,10 +29,6 @@ class SceneHD(TorrentProvider): }) url = "%s&%s" % (self.urls['search'], arguments) - # Cookie login - if not self.login(): - return - data = self.getHTMLData(url, opener = self.login_opener) if data: