プログラムでQGISプロキシ設定を切り替える


8

プロキシサーバーが異なる2つのオフィスでQGISを使用しています。

現時点では、オフィスを切り替えるたびに手動でプロキシ設定を変更する必要があります。

PyQGISを使用してプログラムでプロキシ設定を変更できるかどうか疑問に思っていましたか?次に、プロキシ設定を切り替えるプラグインを作成できます。

編集1:

それまでの間、QGISのプロキシ設定を変更する方法を見つけましたが、それでも機能しません。

このコードを使用して、設定を変更できます。

from PyQt4.QtCore import QUrl, QSettings
from PyQt4.QtNetwork import QNetworkRequest, QNetworkProxy
from qgis.core import QgsNetworkAccessManager

my_settings={"Proxy enabled": u'proxy/proxyEnabled', "Proxy Host ": u'proxy/proxyHost', "Proxy Port": u'proxy/proxyPort'}
fiddler={"Proxy enabled": True, "Proxy Host ": "localhost", "Proxy Port": 8888}
freiburg={"Proxy enabled": True, "Proxy Host ": "192.168.95.165", "Proxy Port": 8080}
aus={"Proxy enabled": False, "Proxy Host ": "192.168.95.165", "Proxy Port": 8080}

current_choice=aus

s = QSettings() #getting proxy from qgis options settings

for key, val in my_settings.iteritems():
    #print str(key)+":"+str(val)
    settings_key=key
    #print str(settings_key)
    # Get user defined current setting
    for key2, val2 in current_choice.iteritems():
        if key2==settings_key:
            #print key
            #print val
            settings_val=val2
    current_setting = s.value(str(val).decode('unicode-escape'))
    #print str(val).decode('unicode-escape')
    #print str(key)+": "+str(current_setting)
    s.setValue(unicode(str(val)), settings_val)
s.sync()

# procedure to set proxy if needed

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)

これは、変更された設定をQGIS UIで確認できる限りは機能します(設定->オプション)。

設定はWindowsレジストリにも書き込まれますが、QGIS設定ダイアログの[OK]ボタンをクリックするまで、変更は有効になりません。

プログラムでプロキシを設定して、QGISがインターネットにアクセスできないようにするいくつかのプロキシ設定(localhost:98765など)でこれをテストし、wms-layerをロードしてパンすることを試みることができます。何が欠けているのでしょうか?

Edit2:qgisからの出力をファイルにパイプし、GUIを使用してプロキシ設定を変更するとどうなるかを確認しました。

src/core/qgsnetworkaccessmanager.cpp: 364: (setupDefaultProxyAndCache) [9134ms] setting proxy 3 192.168.95.165:8080 /
src/core/qgsnetworkaccessmanager.cpp: 167: (setFallbackProxyAndExcludes) [0ms] proxy settings: (type:HttpProxy host: 192.168.95.165:8080, user:, password:not set

したがって、2つの関数(setupDefaultProxyAndCacheおよびsetFallbackProxyAndExcludes)が呼び出されます。おそらく、pyQGISを使用して設定を変更するときに、そのようなことを行う必要がありますか?


おそらくこの投稿が役立つかもしれません:qgisプラグインでのプロキシパラメータの設定。方法
ジョセフ

このソリューションは特定のプラグインによって行われたリクエストに対してのみ機能し、QGISの一般的なプロキシ設定としては機能しないと思います。WMSレイヤーを読み込むためにプロキシ設定が必要です
markgraeflerland

回答:


3

これらのキーを変更すると、上記のPythonコンソールのコードを使用して、QGIS 2.14 EssenのGUIとWindowsレジストリの両方の設定が変更されました。

u'proxy/proxyEnabled', u'proxy/proxyExcludedUrls', u'proxy/proxyHost', u'proxy/proxyPassword', u'proxy/proxyPort', u'proxy/proxyType', u'proxy/proxyUser'

そして最後に追加:

QSettings.sync()

私はコードの最後でQSettings()。sync()を呼び出してみましたが、それでも同じです。設定を開いて[OK]ボタンをクリックした場合のみ、変更が適用されます。
markgraeflerland

GUIとレジストリの設定を変更できますが、設定ダイアログの[OK]ボタンを押すまで、設定はまだ効果がありません
markgraeflerland

2

問題が解決しました。QgsNetworkAccessManagerを新しい値に設定する必要がありました

from qgis.core import *
from PyQt4.QtCore import *
from PyQt4.QtNetwork import QNetworkRequest, QNetworkProxy

my_settings={"Proxy enabled": u'proxy/proxyEnabled', "Proxy Host ": u'proxy/proxyHost', "Proxy Port": u'proxy/proxyPort'}
fiddler={"Proxy enabled": True, "Proxy Host ": "localhost", "Proxy Port": 8888}
freiburg={"Proxy enabled": True, "Proxy Host ": "192.168.95.165", "Proxy Port": 8080}
aus={"Proxy enabled": False, "Proxy Host ": "192.168.95.165", "Proxy Port": 8080}

current_choice=aus

s = QSettings() #getting proxy from qgis options settings

for key, val in my_settings.iteritems():
    settings_key=key
    for key2, val2 in current_choice.iteritems():
        if key2==settings_key:
            settings_val=val2
    current_setting = s.value(str(val).decode('unicode-escape'))
    s.setValue(unicode(str(val)), settings_val)
s.sync()

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", "" )
proxy = QNetworkProxy()
#setting HttpPtoxy
proxy.setType(QNetworkProxy.HttpProxy)

proxy.setHostName(proxyHost)
proxy.setPort(int(proxyPort))
proxy.setUser(proxyUser)
proxy.setPassword(proxyPassword)
QNetworkProxy.setApplicationProxy(proxy)
network_manager=QgsNetworkAccessManager.instance()
stringlist= ""
network_manager.setupDefaultProxyAndCache ()
network_manager.setFallbackProxyAndExcludes(proxy, stringlist)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.