Saya menggunakan QGIS di dua kantor dengan server proxy yang berbeda.
Saat ini saya harus mengubah pengaturan proxy secara manual setiap kali saya berganti kantor.
Saya bertanya-tanya apakah mungkin untuk mengubah pengaturan proxy secara terprogram dengan PyQGIS? maka saya bisa menulis plugin untuk beralih di antara pengaturan-proxy.
EDIT1:
Sementara itu saya menemukan cara untuk mengubah pengaturan proxy QGIS tetapi tetap saja tidak berfungsi.
Dengan kode ini saya dapat mengubah pengaturan:
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)
Ini berfungsi sejauh saya bisa melihat pengaturan yang diubah di QGIS UI (pengaturan-> opsi).
Pengaturan juga ditulis ke registri windows tetapi perubahan tidak akan berpengaruh sampai saya klik tombol OK di dialog pengaturan QGIS.
Anda dapat menguji ini dengan mengatur proksi secara programatik ke beberapa proksi-pengaturan yang seharusnya mencegah QGIS mengakses internet (misalnya localhost: 98765) dan mencoba memuat dan menggeser melalui lapisan wms. Ada yang tahu apa yang hilang?
Edit2: Saya baru saja memipipkan output dari qgis ke file dan melihat apa yang terjadi ketika saya mengubah pengaturan proxy menggunakan 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
Jadi ada dua fungsi yang disebut (setupDefaultProxyAndCache dan setFallbackProxyAndExcludes). Mungkin sesuatu seperti itu harus dilakukan ketika menggunakan pyQGIS untuk mengubah pengaturan?
Jawaban:
Mengubah kunci-kunci ini mengubah pengaturan di GUI dan Windows Registry QGIS 2.14 Essen menggunakan kode Anda di atas di Python Console:
Dan pada akhirnya tambahkan:
sumber
Masalah terpecahkan. QgsNetworkAccessManager harus disetel ke nilai baru :
sumber