Tôi đang sử dụng QGIS tại hai văn phòng với các máy chủ proxy khác nhau.
Hiện tại tôi phải thay đổi cài đặt proxy theo cách thủ công mỗi khi tôi chuyển văn phòng.
Tôi đã tự hỏi liệu có thể thay đổi cài đặt proxy theo chương trình với PyQGIS không? sau đó tôi có thể viết một plugin để chuyển giữa các cài đặt proxy.
EDIT1:
Trong thời gian chờ đợi, tôi đã tìm thấy một cách để thay đổi cài đặt proxy của QGIS nhưng nó vẫn không hoạt động.
Với mã này tôi có thể thay đổi cài đặt:
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)
Điều này hoạt động cho đến khi tôi có thể thấy các cài đặt đã thay đổi trong Giao diện người dùng QGIS (cài đặt-> tùy chọn).
Các cài đặt cũng được ghi vào sổ đăng ký windows nhưng những thay đổi sẽ không có hiệu lực cho đến khi tôi nhấp vào nút OK trong hộp thoại cài đặt QGIS.
Bạn có thể kiểm tra điều này bằng cách đặt proxy theo chương trình cho một số cài đặt proxy sẽ ngăn không cho QGIS truy cập internet (ví dụ: localhost: 98765) và thử tải và xoay qua lớp wms. Bất cứ ý tưởng những gì còn thiếu?
Edit2: Tôi vừa chuyển đầu ra từ qgis sang một tệp và xem xét những gì đang xảy ra khi tôi thay đổi cài đặt proxy bằng 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
Vì vậy, có hai hàm được gọi là (setupDefaultProxyAndCache và setFallbackProxyAndExcludes). Có lẽ một cái gì đó như thế phải được thực hiện khi sử dụng pyQGIS để thay đổi cài đặt?