自动检测代理设置linux

时间:2011-09-07 18:38:02

标签: python proxy mechanize

我正在编写一个需要从Internet发送和检索一些信息的python应用程序。我想自动检测代理设置(以避免要求用户设置代理配置)。似乎urllib可以在Windows和Mac OsX上执行此操作,而不是在Unix / Linux上执行此操作。

我需要/更喜欢使用mechanize模块,而不是urllib / urllib2。 (处理编码为“multipart / form-data”的数据更容易。

机械化模块可以自动检测代理设置吗?如果是,它将适用于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

我想这意味着机械化无法自动检测代理设置(或者我可能做错了)

如何在Linux上自动检测代理设置(使用python)?

编辑:9月9日补充

我可以确认Mechanize在Windows上自动检测代理设置,但在Linux上没有。 正如mru正确指出Linux下没有标准化的方法来确定代理,所以我想最好的解决方案是检查用户是否使用Linux并在这种情况下尝试从http_proxy环境变量中获取代理设置或者来自gconf(用于Gnome)或来自kioslaverc(KDE)。如果一切都失败了,我会要求用户提供正确的代理设置(我认为这是一个公平的解决方案,因为一方面我认为大多数Linux用户都知道代理是什么,另一方面,至少我试图让事情变得更容易为他们:-))

1 个答案:

答案 0 :(得分: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)。