def _send_request(self, url, callback, method='GET', body=None, headers=None): # this is called when request is NOT downloaded via webpage.mainFrame() # XXX: The caller must ensure self._delete_reply is called in a callback. if method.upper() not in ["POST", "GET"]: raise NotImplementedError() if body is not None: assert isinstance(body, bytes) request = self.request_obj(url, headers=headers, body=body) # setting UA for request that is not downloaded via webpage.mainFrame().load_to_mainframe() ua_from_headers = _get_header_value(headers, b'user-agent') web_page_ua = self.web_page.userAgentForUrl(to_qurl(url)) user_agent = ua_from_headers or web_page_ua request.setRawHeader(b"user-agent", to_bytes(user_agent)) if method.upper() == "POST": reply = self.network_manager.post(request, body) else: reply = self.network_manager.get(request) reply.finished.connect(callback) self._replies.add(reply) return reply
def set_content(self, data, callback, errback, mime_type=None, baseurl=None): """ Set page contents to ``data``, then wait until page loads. Invoke a callback if load was successful or errback if it wasn't. """ if mime_type is None: mime_type = "text/html; charset=utf-8" if baseurl is None: baseurl = '' if isinstance(data, unicode): data = data.encode('utf8') callback_id = self._load_finished.connect( self._on_content_ready, callback=callback, errback=errback, ) self.logger.log("callback %s is connected to loadFinished" % callback_id, min_level=3) self.web_page.mainFrame().setContent(data, mime_type, to_qurl(baseurl))
def request_obj(self, url, headers=None, body=None): """ Return a QNetworkRequest object """ request = QNetworkRequest() request.setUrl(to_qurl(url)) request.setOriginatingObject(self.web_page.mainFrame()) if headers is not None: self.web_page.skip_custom_headers = True self._set_request_headers(request, headers) if body and not request.hasRawHeader(b"content-type"): # there is POST body but no content-type # QT will set this header, but it will complain so better to do this here request.setRawHeader(b"content-type", b"application/x-www-form-urlencoded") return request
def set_content(self, data, callback, errback, mime_type=None, baseurl=None): """ Set page contents to ``data``, then wait until page loads. Invoke a callback if load was successful or errback if it wasn't. """ if mime_type is None: mime_type = "text/html; charset=utf-8" if baseurl is None: baseurl = '' callback_id = self._load_finished.connect( self._on_content_ready, callback=callback, errback=errback, ) self.logger.log("callback %s is connected to loadFinished" % callback_id, min_level=3) self.web_page.mainFrame().setContent(data, mime_type, to_qurl(baseurl))
def delete(self, name=None, url=None): """ Remove all cookies with a passed name for the passed url. Return a number of cookies deleted. """ all_cookies = self.allCookies() if url is None: new_cookies = [c for c in all_cookies if bytes(c.name()) != name] else: remove_cookies = self.cookiesForUrl(to_qurl(url)) if name is not None: remove_cookies = [c for c in remove_cookies if bytes(c.name()) == name] to_remove = {self._cookie_fp(c) for c in remove_cookies} new_cookies = [ c for c in all_cookies if self._cookie_fp(c) not in to_remove ] self.setAllCookies(new_cookies) return len(all_cookies) - len(new_cookies)
def delete(self, name=None, url=None): """ Remove all cookies with a passed name for the passed url. Return a number of cookies deleted. """ all_cookies = self.allCookies() if url is None: new_cookies = [c for c in all_cookies if bytes(c.name()) != name] else: remove_cookies = self.cookiesForUrl(to_qurl(url)) if name is not None: remove_cookies = [ c for c in remove_cookies if bytes(c.name()) == name ] to_remove = {self._cookie_fp(c) for c in remove_cookies} new_cookies = [ c for c in all_cookies if self._cookie_fp(c) not in to_remove ] self.setAllCookies(new_cookies) return len(all_cookies) - len(new_cookies)