powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / QTNetwork перехват отправленных данных
1 сообщений из 1, страница 1 из 1
QTNetwork перехват отправленных данных
    #38978589
На сайте вводишь в форму логин и пароль и отправляешь. Эти данные нужно перехватить. Вот мое решение:

Код: 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
1 сообщений из 1, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / QTNetwork перехват отправленных данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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