【问题标题】:Pyqt5 the proxy type is invalid for this operationPyqt5 代理类型对该操作无效
【发布时间】:2021-09-03 13:18:57
【问题描述】:

我以前使用that 代码,它对我有用。 但是现在,有些事情发生了变化,我遇到了这个错误:

the proxy type is invalid for this operation

我发现如果代理设置关闭它仍然可以工作,但是我应该怎么做才能解决这个代理问题?

这是我使用的代码示例:

from functools import cached_property
import sys

from PyQt5 import QtCore, QtGui, QtWidgets, QtNetwork


class Client(QtCore.QObject):
    messageChanged = QtCore.pyqtSignal(str)

    def __init__(self, parent=None):
        super().__init__(parent)
        self.socket.stateChanged.connect(self.handle_state_changed)
        self.socket.errorOccurred.connect(self.handle_error_occurred)
        self.socket.readyRead.connect(self.handle_ready_read)

    @cached_property
    def socket(self):
        return QtNetwork.QTcpSocket()

    def try_connect(self):
        self.socket.connectToHost("127.0.0.1", 5555)

    def handle_state_changed(self, state):
        print(f"state: {state}")
        if state == QtNetwork.QAbstractSocket.UnconnectedState:
            print("disconnected")
            QtCore.QTimer.singleShot(1000, self.try_connect)
        elif state == QtNetwork.QAbstractSocket.ConnectedState:
            print("connected")

    def handle_error_occurred(self, error):
        print(f"error code {error}, message: {self.socket.errorString()}")

    def handle_ready_read(self):
        codec = QtCore.QTextCodec.codecForName("UTF-8")
        message = codec.toUnicode(self.socket.readAll())
        self.messageChanged.emit(message)


class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.client.messageChanged.connect(self.handle_message_changed)
        self.client.try_connect()

    @cached_property
    def client(self):
        return Client()

    def handle_message_changed(self, message):
        print(f"client message: {message}")


def main():

    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())


if __name__ == "__main__":
    main()

我也看到了issue,但我不明白如何在我的代码中使用它。

【问题讨论】:

  • 您是否在问如何绕过现有代理使其工作?似乎链接的解决方案是您应该做的,还有什么不清楚的地方?
  • @musicamante 是的,我知道如何使它与现有代理一起工作。我无法关闭 Windows 上的代理设置。

标签: python pyqt5


【解决方案1】:

我想通了。我应该在连接之前设置一个“NoProxy”类型。就像在that 主题中一样。

我的例子:

class Client(QtCore.QObject):
messageChanged = QtCore.pyqtSignal(str)

def __init__(self, parent=None):
    super().__init__(parent)
    self.proxy = QtNetwork.QNetworkProxy(QtNetwork.QNetworkProxy.NoProxy)
    self.socket.stateChanged.connect(self.handle_state_changed)
    self.socket.errorOccurred.connect(self.handle_error_occurred)
    self.socket.readyRead.connect(self.handle_ready_read)

@cached_property
def socket(self):
    return QtNetwork.QTcpSocket()

def try_connect(self):
    self.socket.setProxy(self.proxy)
    self.socket.connectToHost("ADDRESS", PORT)

这对我有用。

【讨论】:

    猜你喜欢
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多