Exemplo n.º 1
0
    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
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
 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))
Exemplo n.º 4
0
    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
Exemplo n.º 5
0
 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))
Exemplo n.º 6
0
    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
Exemplo n.º 7
0
    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)
Exemplo n.º 8
0
    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)