autodetect proxy setting linux

坚强是说给别人听的谎言 提交于 2020-01-04 00:58:12

问题


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 :-) )


回答1:


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).



来源:https://stackoverflow.com/questions/7338837/autodetect-proxy-setting-linux

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!