J'utilise QGIS dans deux bureaux avec des serveurs proxy différents.
Pour le moment, je dois modifier manuellement les paramètres du proxy chaque fois que je change de bureau.
Je me demandais s'il était possible de modifier les paramètres de proxy par programme avec PyQGIS? alors je pourrais écrire un plugin pour basculer entre les paramètres proxy.
EDIT1:
En attendant, j'ai trouvé un moyen de modifier les paramètres de proxy de QGIS mais cela ne fonctionne toujours pas.
Avec ce code, je peux modifier les paramètres:
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)
Cela fonctionne pour autant que je puisse voir les paramètres modifiés dans l'interface utilisateur de QGIS (paramètres-> options).
Les paramètres sont également écrits dans le registre Windows, mais les modifications n'auront aucun effet tant que je n'aurai pas cliqué sur le bouton OK dans la boîte de dialogue des paramètres QGIS.
Vous pouvez tester cela en définissant le proxy par programmation sur certains paramètres de proxy qui devraient empêcher QGIS d'accéder à Internet (par exemple localhost: 98765) et essayez de charger et de parcourir une couche wms. Une idée de ce qui manque?
Edit2: Je viens de canaliser la sortie de qgis vers un fichier et j'ai regardé ce qui se passe lorsque je change les paramètres de proxy en utilisant l'interface graphique:
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
Il existe donc deux fonctions appelées (setupDefaultProxyAndCache et setFallbackProxyAndExcludes). Peut-être que quelque chose comme ça doit être fait lors de l'utilisation de pyQGIS pour modifier les paramètres?