PyQt + QtWebkit 通过代理使用
我正在写一个PyQt应用程序(PyQt是一个可以让我们用Python来使用强大的Qt库的工具),我的应用里有一小部分需要用到网页浏览器(提示一下,是OAuth相关的功能)。所以我开始使用QtWebkit,顺便说一下,这个工具非常棒。唯一的问题是,我希望能让使用代理的用户也能顺利使用我的应用。
我了解到QtNetwork包里的QNetworkProxy类,觉得它应该能解决这个问题。问题是,当我创建并应用这个代理时,它在HTTP上运行得很好,但当我用HTTPS(SSL)网址时,就出现了以下错误:
QSslSocket: cannot call unresolved function SSLv3_client_method
QSslSocket: cannot call unresolved function SSL_CTX_new
QSslSocket: cannot call unresolved function SSL_library_init
QSslSocket: cannot call unresolved function ERR_get_error
QSslSocket: cannot call unresolved function ERR_error_string
注意:当我运行...
QtNetwork.QSslSocket.supportsSsl()
.. 它返回的是false。这就证明了我的问题。
这是我的主要代码(就在我创建QApplication之前):
proxy = QtNetwork.QNetworkProxy()
proxy.setType(QtNetwork.QNetworkProxy.Socks5Proxy)
proxy.setHostName('localhost');
proxy.setPort(1337)
QtNetwork.QNetworkProxy.setApplicationProxy(proxy);
我从这里获取了代码,但那个例子是用C++写的,不是Python,所以我不太确定我是否翻译得正确。这可能就是问题所在。
编辑:我尝试过SOCKS5和HTTP代理,它们都抛出了相同的错误。
1 个回答
6
我当时在使用Windows XP(32位)和Python 2.6以及PyQt 4.7.4。出现问题的原因是...
QtNetwork.QSslSocket.supportsSsl()
返回了false,是因为我没有在系统上安装OpenSSL的二进制文件。
为了解决这个问题,我去这个网站下载了这些二进制文件。在它们能够正常安装之前,我还需要从微软安装Visual C++ 2008的运行库。
现在一切都运行得很好!