Linux自动检测代理设置

发布于 2024-12-03 13:45:56 字数 1069 浏览 1 评论 0原文

我正在编写一个 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 用户都知道代理是什么,另一方面至少我试图让事情变得更容易对他们来说:-))

I am writing a python app that needs to send and retrieve some information from Internet. I would like to auto-detect the proxy setting (to avoid asking the user to set up the proxy configuration). It seems that urllib can do this on Windows and Mac OsX and not on Unix/Linux.

I need/prefer to use the mechanize module, instead of urllib/urllib2. (It is easier to handle data encoded as "multipart/form-data).

Can the mechanize module auto-detect the proxy setting? If true, it will work on Windows, Mac OsX and Linux?

The following code does not work (I am behind a proxy on Linux), unless I uncomment the fourth line.

import mechanize

br = mechanize.Browser()
#br.set_proxies({'http': 'myproxy.com:3128'})
br.open('http://www.google.com')
response = br.geturl()
print response

I guess this means that mechanize can´t auto-detect proxy setting (or may be I am doing something wrong)

How can I auto-detect the proxy setting on Linux (using python)?

EDIT: added on 9th september

I could confirm that Mechanize autodetects proxy setting on Windows, but not on Linux.
As mru correctly pointed out there is no standardized way under Linux to determine the proxy, so I guess the best solution is to check if the user is using Linux and In that case try to get the proxy settings from http_proxy environment variable or from gconf (for Gnome) or from kioslaverc (KDE). And if everything fails I will ask the user to provided the correct proxy settings (I think this is a fair solution because on one hand I think most Linux users know what a proxy is and on the other hand at least I tried to make things easier for them :-) )

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

忆梦 2024-12-10 13:45:56

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

One way is to check the HTTP_PROXY environment variable (that's the way wget checks if it has to use a proxy). The code could look like this for example:

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

But this won't work on Windows (I don't know for MacOS as it's UNIX based).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文