def __init__(self, *args): QWebView.__init__(self, *args) self.gui = None self.tags = '' self.create_browser = None self._page = NPWebPage() self.setPage(self._page) self.cookie_jar = QNetworkCookieJar() self.page().networkAccessManager().setCookieJar(self.cookie_jar) http_proxy = get_proxies().get('http', None) if http_proxy: proxy_parts = urlparse(http_proxy) proxy = QNetworkProxy() proxy.setType(QNetworkProxy.HttpProxy) if proxy_parts.username: proxy.setUser(proxy_parts.username) if proxy_parts.password: proxy.setPassword(proxy_parts.password) if proxy_parts.hostname: proxy.setHostName(proxy_parts.hostname) if proxy_parts.port: proxy.setPort(proxy_parts.port) self.page().networkAccessManager().setProxy(proxy) self.page().setForwardUnsupportedContent(True) self.page().unsupportedContent.connect(self.start_download) self.page().downloadRequested.connect(self.start_download) self.page().networkAccessManager().sslErrors.connect(self.ignore_ssl_errors)
def __init__(self, log, disk_cache_size=50, parent=None): QNetworkAccessManager.__init__(self, parent) self.reply_count = 0 self.log = log if disk_cache_size > 0: self.cache = QNetworkDiskCache(self) self.cache.setCacheDirectory(PersistentTemporaryDirectory(prefix='disk_cache_')) self.cache.setMaximumCacheSize(int(disk_cache_size * 1024 * 1024)) self.setCache(self.cache) self.sslErrors.connect(self.on_ssl_errors) self.pf = ProxyFactory(log) self.setProxyFactory(self.pf) self.finished.connect(self.on_finished) self.cookie_jar = QNetworkCookieJar() self.setCookieJar(self.cookie_jar) self.main_thread = current_thread() self.report_reply_signal.connect(self.report_reply, type=Qt.QueuedConnection)
def setCookiesFromUrl(self, cookieList, url): res = QNetworkCookieJar.setCookiesFromUrl(self, cookieList, url) self.saveCookies() return res
class NetworkAccessManager(QNetworkAccessManager): # {{{ OPERATION_NAMES = {getattr(QNetworkAccessManager, '%sOperation'%x) : x.upper() for x in ('Head', 'Get', 'Put', 'Post', 'Delete', 'Custom') } report_reply_signal = pyqtSignal(object) def __init__(self, log, disk_cache_size=50, parent=None): QNetworkAccessManager.__init__(self, parent) self.reply_count = 0 self.log = log if disk_cache_size > 0: self.cache = QNetworkDiskCache(self) self.cache.setCacheDirectory(PersistentTemporaryDirectory(prefix='disk_cache_')) self.cache.setMaximumCacheSize(int(disk_cache_size * 1024 * 1024)) self.setCache(self.cache) self.sslErrors.connect(self.on_ssl_errors) self.pf = ProxyFactory(log) self.setProxyFactory(self.pf) self.finished.connect(self.on_finished) self.cookie_jar = QNetworkCookieJar() self.setCookieJar(self.cookie_jar) self.main_thread = current_thread() self.report_reply_signal.connect(self.report_reply, type=Qt.QueuedConnection) def on_ssl_errors(self, reply, errors): reply.ignoreSslErrors() def createRequest(self, operation, request, data): url = unicode(request.url().toString(QUrl.None)) operation_name = self.OPERATION_NAMES[operation] debug = [] debug.append(('Request: %s %s' % (operation_name, url))) for h in request.rawHeaderList(): try: d = ' %s: %s' % (h, request.rawHeader(h)) except: d = ' %r: %r' % (h, request.rawHeader(h)) debug.append(d) if data is not None: raw = data.peek(1024) try: raw = raw.decode('utf-8') except: raw = repr(raw) debug.append(' Request data: %s'%raw) self.log.debug('\n'.join(debug)) return QNetworkAccessManager.createRequest(self, operation, request, data) def on_finished(self, reply): if current_thread() is not self.main_thread: # This method was called in a thread created by Qt. The python # interpreter may not be in a safe state, so dont do anything # more. This signal is queued which means the reply wont be # reported unless someone spins the event loop. So far, I have only # seen this happen when doing Ctrl+C in the console. self.report_reply_signal.emit(reply) else: self.report_reply(reply) def report_reply(self, reply): reply_url = unicode(reply.url().toString(QUrl.None)) self.reply_count += 1 err = reply.error() if err: l = self.log.debug if err == reply.OperationCanceledError else self.log.warn l("Reply error: %s - %d (%s)" % (reply_url, err, unicode(reply.errorString()))) else: debug = [] debug.append("Reply successful: %s" % reply_url) for h in reply.rawHeaderList(): try: d = ' %s: %s' % (h, reply.rawHeader(h)) except: d = ' %r: %r' % (h, reply.rawHeader(h)) debug.append(d) self.log.debug('\n'.join(debug)) def py_cookies(self): for c in self.cookie_jar.allCookies(): name, value = map(bytes, (c.name(), c.value())) domain = bytes(c.domain()) initial_dot = domain_specified = domain.startswith(b'.') secure = bool(c.isSecure()) path = unicode(c.path()).strip().encode('utf-8') expires = c.expirationDate() is_session_cookie = False if expires.isValid(): expires = expires.toTime_t() else: expires = None is_session_cookie = True path_specified = True if not path: path = b'/' path_specified = False c = Cookie(0, # version name, value, None, # port False, # port specified domain, domain_specified, initial_dot, path, path_specified, secure, expires, is_session_cookie, None, # Comment None, # Comment URL {} # rest ) yield c
def __init__(self, parent=None): QNetworkCookieJar.__init__(self, parent) self.storage = QSettings(QSettings.IniFormat, QSettings.UserScope, "fbreader", "plugin") self.loadCookies()