我正在编写一个Python应用程序,需要从互联网发送和检索一些信息。我想自动检测代理设置(以避免要求用户设置代理配置)。似乎 urllib 可以在Windows和Mac OsX上实现此功能,但不能在Unix/Linux上实现。
我需要/更喜欢使用mechanize模块,而不是urllib/urllib2。(它更容易处理编码为“multipart/form-data”的数据)。
mechanize模块能否自动检测代理设置?如果可以,在Windows、Mac OsX和Linux上都能正常工作吗?
以下代码不起作用(我在Linux后面有一个代理),除非我取消注释第四行。
我猜这意味着 mechanize 无法自动检测代理设置(或者我做错了什么)。
如何在 Linux 上自动检测代理设置(使用 Python)?
编辑:9月9日添加
我可以确认 Mechanize 在 Windows 上自动检测代理设置,但在 Linux 上不行。正如 mru 所指出的,在 Linux 下没有标准化的方法来确定代理,所以我想最好的解决方案是检查用户是否正在使用 Linux,并在这种情况下尝试从 http_proxy 环境变量或 gconf(对于 Gnome)或 kioslaverc(KDE)中获取代理设置。如果所有方法都失败了,我将要求用户提供正确的代理设置(我认为这是一个公平的解决方案,因为一方面我认为大多数 Linux 用户知道什么是代理,另一方面至少我试图让事情变得更容易 :-))。
我需要/更喜欢使用mechanize模块,而不是urllib/urllib2。(它更容易处理编码为“multipart/form-data”的数据)。
mechanize模块能否自动检测代理设置?如果可以,在Windows、Mac OsX和Linux上都能正常工作吗?
以下代码不起作用(我在Linux后面有一个代理),除非我取消注释第四行。
import mechanize
br = mechanize.Browser()
#br.set_proxies({'http': 'myproxy.com:3128'})
br.open('http://www.google.com')
response = br.geturl()
print response
我猜这意味着 mechanize 无法自动检测代理设置(或者我做错了什么)。
如何在 Linux 上自动检测代理设置(使用 Python)?
编辑:9月9日添加
我可以确认 Mechanize 在 Windows 上自动检测代理设置,但在 Linux 上不行。正如 mru 所指出的,在 Linux 下没有标准化的方法来确定代理,所以我想最好的解决方案是检查用户是否正在使用 Linux,并在这种情况下尝试从 http_proxy 环境变量或 gconf(对于 Gnome)或 kioslaverc(KDE)中获取代理设置。如果所有方法都失败了,我将要求用户提供正确的代理设置(我认为这是一个公平的解决方案,因为一方面我认为大多数 Linux 用户知道什么是代理,另一方面至少我试图让事情变得更容易 :-))。