Настройка autodetect proxy linux

Я пишу приложение python, которому необходимо отправить и получить некоторую информацию из Интернета. Я хотел бы автоматически определить настройку прокси-сервера (чтобы не просить пользователя настроить конфигурацию прокси-сервера). Кажется, что urllib может сделать это в Windows и Mac OsX, а не в Unix/Linux.

Мне нужно/предпочитаю использовать модуль механизации вместо 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)?

EDIT: добавлено 9 сентября

Я могу подтвердить, что Mechanize автоматически определяет настройки прокси-сервера в Windows, но не в Linux. Поскольку mru правильно указал, что в Linux нет стандартизованного способа определения прокси-сервера, поэтому я думаю, что лучшим решением является проверка того, использует ли пользователь Linux и In в этом случае попробуйте установить параметры прокси-сервера из переменной окружения http_proxy или из gconf (для Gnome) или из kioslaverc (KDE). И если все провалится, я попрошу пользователя предоставить правильные настройки прокси-сервера (я думаю, что это справедливое решение, потому что, с одной стороны, я думаю, что большинство пользователей Linux знают, что такое прокси-сервер, и, с другой стороны, по крайней мере, я попытался упростить для них:-))

1 ответ

Один из способов - проверить переменную среды 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).

licensed under cc by-sa 3.0 with attribution.