How can I get Mac OS X's proxy information in a Bash script?

I have several network locations set up on my laptop: Work, Home, etc. The work one(s) all have a proxy server set up, while the others don't. This works fine for OSX applications -- Safari, Mail, even Firefox and Thunderbird with the System Proxy plugin.

For terminal applications such as git, svn, gem, and curl I have the following in my .bash_profile:

export HTTP_PROXY='http://proxy.mycompany.com:80'
export http_proxy=$HTTP_PROXY

My question is this: is there some way to make the exported variable look up the value from my system's current location? I'd prefer it to be done dynamically (so if I change locations during a terminal session it will change), but I'd be happy with just one that set it when .bash_profile ran (meaning I'd have to start a new terminal session when I changed locations).

Thanks!


What version of Mac OS X? I'm not positive the tool is included with Mac OS X 10.4 or earlier.

networksetup should be what you're looking for, namely sudo networksetup -getwebproxy NAME_OF_NETWORK_DEVICE (eg. sudo networksetup -getwebproxy Airport)

The output comes out as so:

Enabled: Yes
Server: SERVER_ADDRESS
Port: 123
Authenticated Proxy Enabled: 0 for false, 1 for true

So you will need to convert the output to something usable.

A really crude example using awk a couple times (my awk skills are rather basic) would be:

sudo networksetup -getwebproxy Airport | awk {'print $2'} | awk {'getline l2; getline l3; print "http://"l2":"l3'} | head -n 1

Results in an output http://SERVER_ADDRESS:123


In the answer above, there is a comment from tlrobinson about how it doesn't include the port number.

You can do that by switching out HTTP Proxy Server with HTTP Proxy Port

I have also seen this done like this:

system_profiler SPNetworkDataType | grep "HTTP Proxy Server" | awk '{print $4}' | head -1
system_profiler SPNetworkDataType | grep "HTTP Proxy Port" | awk '{print $4}' | head -1