Python 自动检测代理设置linux

Python 自动检测代理设置linux,python,proxy,mechanize,Python,Proxy,Mechanize,我正在编写一个python应用程序,需要从Internet发送和检索一些信息。我想自动检测代理设置(以避免要求用户设置代理配置)。似乎在Windows和Mac OsX上可以做到这一点,而在Unix/Linux上则不行 我需要/更喜欢使用mechanize模块,而不是urllib/urllib2。(更容易处理编码为“多部分/表单数据”的数据) mechanize模块能否自动检测代理设置?如果为真,它将在Windows、Mac OsX和Linux上工作 以下代码不起作用(我在Linux上的代理后面)

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

我需要/更喜欢使用mechanize模块,而不是urllib/urllib2。(更容易处理编码为“多部分/表单数据”的数据)

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 autodetects在Windows上的代理设置,但在Linux上没有。
正如正确指出的那样,在Linux下没有标准化的方法来确定代理,因此我想最好的解决方案是检查用户是否在使用Linux,在这种情况下,尝试从http_proxy环境变量或gconf(对于Gnome)或kioslaverc(KDE)获取代理设置。如果一切都失败了,我会要求用户提供正确的代理设置(我认为这是一个公平的解决方案,因为一方面我认为大多数Linux用户知道代理是什么,另一方面,至少我试着让他们更容易:)

一种方法是检查
HTTP\u 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的)。

谢谢你的回答。我尝试了你的代码,我总是得到
os.environ.get('HTTP\u PROXY')
返回无
urllib
应该单独使用
HTTP\u PROXY
,而不需要显式
。set\u PROXY()
。顺便说一句,我尝试了使用小写和大写的变量HTTP\U PROXY。@aloctavodia您通常如何在您的系统上设置代理?我有一个笔记本,我只在大学里使用代理,我将Firefox配置为自动检测代理设置,并根据每个应用更改代理设置……我没有为系统设置代理(即HTTP_PROXY=None)…我尝试使用“网络代理”(Gnome应用程序)更改代理设置,但如果使用命令“HTTP_PROXY=export HTTP_PROXY”,仍然没有得到任何设置“。我使用您的方法获取代理。我认为这与@mruJFTR的注释有关。在linux下,没有标准的方法来确定代理。HTTP_proxy环境变量(顺便说一句,我认为它是小写的)通常仅为cli程序设置。如果您使用KDE/Gnome之类的桌面环境,并且使用它们的设置,这将不会显示在http_proxyok下…我有一个笔记本,我只在大学里使用代理,我配置了Firefox来自动检测代理设置(可能我可以问他们是如何做到的:-))如果我需要,我会根据每个应用程序更改代理设置(对于Mendeley,有时是synaptic)…我想这意味着我没有全局代理设置(即HTTP_proxy=None)Firefox做了它使用的其他事情我找到了这个python库,我认为它可以帮助完成Firefox所做的事情…但我认为这不是最好的解决方案(我想重新分发代码,并将依赖关系保持在最低限度)