Estou usando o QGIS em dois escritórios com servidores proxy diferentes.
No momento, tenho que alterar as configurações de proxy manualmente sempre que mudar de escritório.
Eu queria saber se é possível alterar as configurações de proxy programaticamente com PyQGIS? então eu poderia escrever um plugin para alternar entre as configurações de proxy.
EDIT1:
Enquanto isso, eu encontrei uma maneira de alterar as configurações de proxy do QGIS, mas ainda não está funcionando.
Com este código, posso alterar as configurações:
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)
Isso funciona até onde posso ver as configurações alteradas na interface do QGIS (configurações-> opções).
As configurações também são gravadas no registro do Windows, mas as alterações não terão efeito até eu clicar no botão OK na caixa de diálogo de configurações do QGIS.
Você pode testar isso configurando o proxy de forma programática para algumas configurações de proxy que devem impedir o QGIS de acessar a Internet (por exemplo, localhost: 98765) e tentar carregar e percorrer uma camada de wms. Alguma idéia do que está faltando?
Edit2: Acabei de canalizar a saída do qgis para um arquivo e dei uma olhada no que está acontecendo quando altero as configurações de proxy usando a 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
Portanto, existem duas funções chamadas (setupDefaultProxyAndCache e setFallbackProxyAndExcludes). Talvez algo assim deva ser feito ao usar o pyQGIS para alterar as configurações?