在QGIS插件中设置代理参数。如何做?
对于那些感兴趣的人,我找到了一个明确的方法,可以在qgis插件中以用户透明的方式设置代理设置。如果你打算使用urllib或QwebView来访问网络服务,这个方法会很有用。通过使用Qsetting函数,可以读取和写入存储在注册表中的用户应用程序选项设置,这些设置是从qgis应用程序中来的。问题是,注册表键的使用并没有文档说明,但如果深入研究qgis的源代码,可以找到这些键并在插件中用于其他目的。以下是一段代码,可以正确设置代理参数。
# procedure to set proxy if needed
s = QSettings() #getting proxy from qgis options settings
proxyEnabled = s.value("proxy/proxyEnabled", "")
proxyType = s.value("proxy/proxyType", "" )
proxyHost = s.value("proxy/proxyHost", "" )
proxyPort = s.value("proxy/proxyPort", "" )
proxyUser = s.value("proxy/proxyUser", "" )
proxyPassword = s.value("proxy/proxyPassword", "" )
if proxyEnabled == "true": # test if there are proxy settings
proxy = QNetworkProxy()
if proxyType == "DefaultProxy":
proxy.setType(QNetworkProxy.DefaultProxy)
elif proxyType == "Socks5Proxy":
proxy.setType(QNetworkProxy.Socks5Proxy)
elif proxyType == "HttpProxy":
proxy.setType(QNetworkProxy.HttpProxy)
elif proxyType == "HttpCachingProxy":
proxy.setType(QNetworkProxy.HttpCachingProxy)
elif proxyType == "FtpCachingProxy":
proxy.setType(QNetworkProxy.FtpCachingProxy)
proxy.setHostName(proxyHost)
proxy.setPort(int(proxyPort))
proxy.setUser(proxyUser)
proxy.setPassword(proxyPassword)
QNetworkProxy.setApplicationProxy(proxy)
2 个回答
1
你应该使用QGIS提供的QgsNetworkAccessManager。这个代理会自动为你设置好。
from qgis.core import QgsNetworkAccessManager
network_manager = QgsNetworkAccessManager.instance()
3
为了补充@gustry的回答,你需要从以下代码开始:
from PyQt4.QtCore import QUrl
from PyQt4.QtNetwork import QNetworkRequest
from qgis.core import QgsNetworkAccessManager
url = 'http://qgis.org/en/site/'
def urlCallFinished(reply):
print(reply.readAll())
reply.deleteLater()
networkAccessManager = QgsNetworkAccessManager.instance()
networkAccessManager.finished.connect(urlCallFinished)
req = QNetworkRequest(QUrl(url))
reply = networkAccessManager.get(req)
关于代理的部分,QgsNetworkAccessManager
可以使用QNetworkProxy
,这在文档中有说明,而QGIS已经为你处理好了这些事情;)