2010-06-16 74 views
8

Tôi đã viết một chương trình dựa trên proxy để hoạt động. Bây giờ tôi cần một tập lệnh sẽ kiểm tra xem liệu trình duyệt có được thiết lập để sử dụng đúng proxy hay không, và nếu không, hãy thay đổi nó để sử dụng nó. Tôi cần điều này được triển khai cho nhiều trình duyệt nhất có thể, nhưng chỉ bắt buộc đối với Internet Explorer, Google Chrome, Mozilla Firefox, Safari và Opera. Tôi thậm chí không chắc chắn làm thế nào để đi về điều này, nhưng nó là dành cho một dự án cho công việc sẽ được do trong một vài ngày. Nếu bất cứ ai có thể giúp đỡ hoặc cho mượn lời khuyên, tôi sẽ đánh giá cao điều đó!Thay đổi cài đặt proxy của trình duyệt từ Python?

Tôi lập trình trên:
MS Windows XP
Python 2.6

+1

Thảo luận về * đọc * cài đặt proxy tại đây mà bạn có thể quan tâm: http://old.nabble.com/using-windows-wide-proxy-settings-td20822378.html Tôi không chắc chắn 'd đi xung quanh tự động thay đổi cài đặt proxy của người dùng mặc dù (trừ khi nó có nghĩa là một số loại phím tắt cấu hình?) Ngoài ra, có http://stackoverflow.com/questions/1201771/how-to-set-proxy-with -python – shambulator

+0

Vâng, tôi đã thấy chúng. Tôi đang tìm một số mã ví dụ hoặc một cái gì đó. Cảm ơn mặc dù. –

+0

Phần mở rộng pythonwin có thể trợ giúp việc này không? –

Trả lời

14

Windows lưu trữ hệ thống ủy quyền rộng của nó trong registry, nhìn vào các HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings. Bạn có thể sử dụng mô-đun Python _winreg để thay đổi nó (hoặc chỉ winreg nếu bạn sử dụng Python 3). Dưới đây là một số mẫu mã

import _winreg as winreg 

INTERNET_SETTINGS = winreg.OpenKey(winreg.HKEY_CURRENT_USER, 
    r'Software\Microsoft\Windows\CurrentVersion\Internet Settings', 
    0, winreg.KEY_ALL_ACCESS) 

def set_key(name, value): 
    _, reg_type = winreg.QueryValueEx(INTERNET_SETTINGS, name) 
    winreg.SetValueEx(INTERNET_SETTINGS, name, 0, reg_type, value) 

set_key('ProxyEnable', 1) 
set_key('ProxyOverride', u'*.local;<local>') # Bypass the proxy for localhost 
set_key('ProxyServer', u'X.X.X.X:8080') 

Để vô hiệu hoá nó, bạn chỉ có thể cần phải thiết lập chính ProxyEnable 0:

set_key('ProxyEnable', 0) 

Sau khi kịch bản chạy các trình duyệt vẫn sẽ có proxy cũ được lưu trữ trong bộ nhớ, vì vậy bạn cần phải khởi động lại chúng để họ có thể đọc lại cài đặt proxy mới từ sổ đăng ký. Tôi thấy điều này rất khó chịu vì vậy tôi đã chuyển đổi this snippet sang Python.

import ctypes 

INTERNET_OPTION_REFRESH = 37 
INTERNET_OPTION_SETTINGS_CHANGED = 39 

internet_set_option = ctypes.windll.Wininet.InternetSetOptionW 

internet_set_option(0, self.INTERNET_OPTION_REFRESH, 0, 0) 
internet_set_option(0, self.INTERNET_OPTION_SETTINGS_CHANGED, 0, 0) 

Làm mới cài đặt Windows để tất cả những gì bạn phải làm là nhấn F5 trong trình duyệt để lấy cài đặt proxy mới.

Tôi đã viết một kịch bản nhỏ để chuyển đổi proxy của tôi bật hoặc tắt, nguồn ở trên Bitbucket: https://bitbucket.org/canassa/switch-proxy

này nên làm việc với bất kỳ trình duyệt sử dụng trên toàn hệ thống của Windows proxy (ví dụ: Chrome, I E). Một số trình duyệt như Firefox sử dụng cài đặt proxy nội bộ. Nếu bạn muốn thay đổi chúng, bạn sẽ tìm ra nơi chúng lưu trữ các thiết lập của chúng và viết mã để thay đổi nó.

Các vấn đề liên quan