You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为PyQt5的QWebEngine配置127.0.0.1:6666代理?

如何为PyQt5的QWebEngine配置自定义代理

要让QWebEngine发送的所有请求都通过你在127.0.0.1:6666搭建的代理,直接用全局QNetworkProxy可能不会完全生效——因为QWebEngine基于Chromium内核,有自己的独立网络栈,更推荐通过QWebEngineProfile来配置代理。

下面是修改后的完整代码,我标注了新增的代理配置部分:

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5 import QtWebEngineWidgets
from PyQt5.QtNetwork import QNetworkProxy  # 新增:导入QNetworkProxy类

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        self.webView = QtWebEngineWidgets.QWebEngineView(self.centralwidget)
        self.webView.setUrl(QtCore.QUrl("http://www.google.com/"))
        self.webView.setObjectName("webView")
        self.gridLayout.addWidget(self.webView, 0, 0, 1, 1)
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)

    # ---------------------- 新增:代理配置核心代码 ----------------------
    # 获取QWebEngine的默认全局配置文件
    profile = QtWebEngineWidgets.QWebEngineProfile.defaultProfile()
    # 创建代理对象并填充参数
    proxy = QNetworkProxy()
    proxy.setType(QNetworkProxy.HttpProxy)  # 如果是SOCKS5代理,改为QNetworkProxy.Socks5Proxy
    proxy.setHostName("127.0.0.1")
    proxy.setPort(6666)
    # 若代理需要身份验证,取消注释以下两行并填入信息
    # proxy.setUser("your_proxy_username")
    # proxy.setPassword("your_proxy_password")
    # 将代理规则应用到配置文件
    profile.setProxy(proxy)
    # -------------------------------------------------------------

    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

关键说明:

  • QWebEngineProfile是QWebEngine的核心配置载体,管理着网络、缓存、Cookie等所有网络相关设置,修改它的代理规则会对所有使用该profile的QWebEngineView生效。
  • 根据你代理的实际类型选择setType参数:HTTP/HTTPS代理用QNetworkProxy.HttpProxy,SOCKS5代理用QNetworkProxy.Socks5Proxy。
  • 如果你的代理需要账号密码验证,只需取消注释代码中的用户名和密码设置行即可。

这样配置后,QWebEngine发出的所有请求都会自动通过你指定的127.0.0.1:6666代理转发了。

内容的提问来源于stack exchange,提问作者Bale

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:11:55