使用PyQt4连接socks5代理

0 投票
1 回答
888 浏览
提问于 2025-04-17 22:02

我正在尝试使用PyQt4连接到一个socks5代理。我可以用普通的代理连接,但用socks5代理(需要用户名和密码)时就不行,使用下面的代码时出现了错误...

TypeError: QNetworkProxy.setPassword(QString): first argument of unbound method must have type 'QNetworkProxy'

代码:

from PyQt4 import QtWebKit
from PyQt4 import QtCore
from PyQt4 import QtGui
from PyQt4.QtNetwork import *


class Render(QtWebKit.QWebPage):
    def __init__(self, url):
        QNetworkProxy.setPassword('password')
        QNetworkProxy.setUser('user')
        QNetworkProxy.setApplicationProxy(QNetworkProxy(QNetworkProxy.Socks5Proxy, "proxy5.com", 1080))

        self.app = QtGui.QApplication(sys.argv)
        QtWebKit.QWebPage.__init__(self)
        self.loadFinished.connect(self._loadFinished)
        self.mainFrame().load(QtCore.QUrl(url))
        self.app.exec_()

    def _loadFinished(self, result):
        self.frame = self.mainFrame()
        self.app.quit()

有没有人知道我哪里出错了呢..??

1 个回答

1

QNetworkProxy.setPassword() 不是一个类方法,而是一个实例方法。所以你需要先创建一个 QNetworkProxy 的实例,然后在这个实例上设置用户名和密码:

def __init__(self, url):
    networkProxy = QNetworkProxy(QNetworkProxy.Socks5Proxy, "proxy5.com", 1080)
    networkProxy.setPassword('password')
    networkProxy.setUser('user')
    QNetworkProxy.setApplicationProxy(networkProxy)

(我检查过上面的语法是正确的,但显然 socks5 的主机(proxy5.com)、端口、用户名和密码都必须是正确的)。如果你还是无法使用,那问题可能出在别的地方,请通过编辑你的问题来说明一下情况。

撰写回答