Estoy usando QGIS en dos oficinas con diferentes servidores proxy.
Por el momento, tengo que cambiar la configuración del proxy manualmente cada vez que cambio la oficina.
Me preguntaba si es posible cambiar la configuración del proxy mediante programación con PyQGIS. entonces podría escribir un complemento para cambiar entre la configuración del proxy.
EDITAR1:
Mientras tanto, encontré una manera de cambiar la configuración de proxy de QGIS pero aún no funciona.
Con este código puedo cambiar la configuración:
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)
Esto funciona hasta donde puedo ver la configuración modificada en la interfaz de usuario de QGIS (configuración-> opciones).
La configuración también se escribe en el registro de Windows, pero los cambios no tendrán ningún efecto hasta que haga clic en el botón Aceptar en el cuadro de diálogo de configuración de QGIS.
Puede probar esto configurando el proxy mediante programación a algunas configuraciones de proxy que deberían evitar que QGIS acceda a Internet (por ejemplo, localhost: 98765) e intente cargar y desplazarse a través de una capa wms. ¿Alguna idea de lo que falta?
Edit2: acabo de canalizar la salida de qgis a un archivo y eché un vistazo a lo que está sucediendo cuando cambio la configuración del proxy usando la 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
Entonces, hay dos funciones llamadas (setupDefaultProxyAndCache y setFallbackProxyAndExcludes). ¿Quizás deba hacerse algo así al usar pyQGIS para cambiar la configuración?
Respuestas:
El cambio de estas teclas cambió la configuración tanto en la GUI como en el Registro de Windows de QGIS 2.14 Essen usando su código anterior en la Consola Python:
Y al final agregue:
fuente
Problema resuelto. QgsNetworkAccessManager tuvo que establecerse en los nuevos valores :
fuente