PyQt:如何使用QWebPage和匿名代理

5 投票
1 回答
2317 浏览
提问于 2025-04-16 14:21

这让我很烦。

我想在一个QWebPage里显示一个网址,但我想通过一个匿名代理来实现。

代码

#setting up the proxy

proxy = QNetworkProxy()
proxy.setHostName("189.75.98.199") #just examples
proxy.setPort(1111)
proxy.setType = QNetworkProxy.HttpProxy

#setting the manager

manager = QNetworkAccessManager()
manager.setProxy(proxy) #setting the proxy on the manager

#setting the proxy as application proxy

QNetworkProxy.setApplicationProxy(proxy) #seems to do nothing..

#web page

webpage = QWebPage()
webpage.setNetworkAccessManager(manager) #maybe.. but it doesn't work

webpage.mainFrame().load(QUrl("http://www.foo.bar") )

我调用了一个测试页面,它会告诉我请求的头信息(在一个php服务器上,所以我查看$_SERVER),但是remote_addr总是显示我的IP,而不是代理的IP。

这是怎么回事?

你能帮我吗?我正在使用PyQt 4.8.3。

1 个回答

4

我搞定了这个问题。

现在这样做就能正常工作了,使用了setApplicationProxy这个方法。我还是不太明白,为什么在创建实例之后再设置代理参数就不行(就像最开始的例子那样)。

def set_proxy(self,  proxy):

    proxy_url = QUrl(proxy)

    if unicode(proxy_url.scheme()).startswith('http'):
        protocol = QNetworkProxy.HttpProxy
    else:
        protocol = QNetworkProxy.Socks5Proxy
    QNetworkProxy.setApplicationProxy(
        QNetworkProxy(
            protocol,
            proxy_url.host(),
            proxy_url.port(),
            proxy_url.userName(),
            proxy_url.password()))

撰写回答