Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / QTNetwork перехват отправленных данных / 1 сообщений из 1, страница 1 из 1
08.06.2015, 03:42
    #38978589
QTNetwork перехват отправленных данных
На сайте вводишь в форму логин и пароль и отправляешь. Эти данные нужно перехватить. Вот мое решение:

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
from PyQt5.QtWebKitWidgets import QWebView, QWebPage
from PyQt5.QtNetwork import QNetworkAccessManager
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QUrl, pyqtSignal
import urllib.parse

USER_AGENT = ("Mozilla/5.0 (compatible; Googlebot/2.1; "
              "+http://www.google.com/bot.html)")


class WebView(QWebView):
    def __init__(self, parent=None):
        super().__init__(parent)
        page = WebPage(self)
        nam = NetworkAccessManager(page)
        nam.loginSubmitted.connect(self.onLogin)
        page.setNetworkAccessManager(nam)
        self.setPage(page)

    def onLogin(self, username, password):
        print("Username:", username)
        print("Password:", password)


class WebPage(QWebPage):
    def userAgentForUrl(self, url):
        return USER_AGENT


class NetworkAccessManager(QNetworkAccessManager):
    loginSubmitted = pyqtSignal(str, str)

    def createRequest(self, op, req, outgoingData):
        url = req.url().toString()
        print("Request URL:", url)
        encoding = b"application/x-www-form-urlencoded"
        if (op == QNetworkAccessManager.PostOperation and
                # При авторизации через мобильную версию ссылка выглядит
                # так:
                # https://login.vk.com/?act=login&
                # _origin=https://m.vk.com&ip_h=<hash>&role=pda&utf8=1
                url.startswith("https://login.vk.com/?act=login") and
                req.rawHeader(b"content-type") == encoding):
            amount = int(req.rawHeader(b"content-length"))
            data = str(outgoingData.peek(amount), 'ascii')
            data = dict(urllib.parse.parse_qsl(data))
            self.loginSubmitted.emit(data['email'], data['pass'])
        return super().createRequest(op, req, outgoingData)


if __name__ == '__main__':
    app = QApplication([])
    web = WebView()
    web.show()
    web.load(QUrl("https://vk.com"))
    app.exec_()



Можно ли это сделать элегантнее? Я QT совсем не знаю, вот и подумал, что может делаю через задницу все.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / QTNetwork перехват отправленных данных / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]