PyQt:如何使用QWebPage和匿名代理
这让我很烦。
我想在一个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()))