自detect代理设置 Linux
我正在写一个Python应用程序,需要从互联网发送和获取一些信息。我希望能够自动检测代理设置,这样就不用让用户自己去设置代理了。看起来urllib在Windows和Mac OsX上可以做到这一点,但在Unix/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用户应该知道什么是代理,同时我也尽量让事情变得简单一些 :-))
1 个回答
0
一种方法是检查一下 HTTP_PROXY
这个环境变量(这就是 wget
检查是否需要使用代理的方式)。代码可以像这样写:
import os
import mechanize
br = mechanize.Browser()
proxy = os.environ.get('HTTP_PROXY')
if proxy is not None:
br.set_proxies({'http': proxy})
br.open('http://www.google.com')
response = br.geturl()
print response
不过,这种方法在Windows上是行不通的(我不太清楚MacOS,因为它是基于UNIX的)。