在qgis插件中设置代理参数。H

2024-09-24 02:15:36 发布

您现在位置:Python中文网/ 问答频道 /正文

对于那些感兴趣的人,我找到了一个明确的方法,可以在qgis插件中以用户透明的方式设置代理设置。如果计划将webservices与urllib或QwebWiew一起使用,这将非常有用。 使用qseting函数可以从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)

Tags: 用户插件ifvalueproxyelifqgisproxyhost
2条回答

您应该使用QGIS提供的QgsNetworkAccessManager。 代理将自动为您设置。在

from qgis.core import QgsNetworkAccessManager
network_manager = QgsNetworkAccessManager.instance()

http://qgis.org/api/classQgsNetworkAccessManager.html

要完成@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,如the documentation所述,并且QGIS已经为您管理它;)。在

相关问题 更多 >