简体   繁体   English

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

[英]Setting proxy parameter in qgis plugins. How to

For those who are interested I found the definitive way to set proxy settings from within qgis plugin in a user-transparent way. 对于那些感兴趣的人,我找到了以用户透明的方式在qgis插件中设置代理设置的明确方法。 This is useful if you plan to use webservices with urllib or QwebWiew. 如果您计划将webservices与urllib或QwebWiew一起使用,这将非常有用。 Using Qsetting function is possible to read and write user application options setting stored in registry from qgis application. 使用Qsetting函数可以从qgis应用程序读取和写入存储在注册表中的用户应用程序选项设置。 The problem is that registry keys use is not documented, but digging into qgis source is possible to find them and use it in plugin for other purpouse. 问题是注册表密钥的使用没有记录,但是挖掘到qgis源代码可以找到它们并在插件中用于其他purpouse。 Here is a block of code to properly set Proxy parameters. 这是一个正确设置代理参数的代码块。

    # 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)

To complete the answer from @gustry, you will have to start with the following code: 要完成@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)

For the proxy part, QgsNetworkAccessManager can use QNetworkProxy as stated by the documentation and QGIS already manages it for you ;). 对于代理部分, QgsNetworkAccessManager可以使用文档中所述的QNetworkProxy ,QGIS已经为您管理它;)。

You should use QgsNetworkAccessManager provided by QGIS. 您应该使用QGIS提供的QgsNetworkAccessManager。 The proxy is automatically set up for you. 代理会自动为您设置。

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

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM