I am writing a command-line tool for Windows that uses libcurl to download files from the internet.
Obviously, the downloading doesn’t work when the user is behind a proxy server, because the proxy needs to be configured. I want to keep my tool as simple as possible however, and not have to burden the user with having to configure the proxy. My tool doesn’t even have a config file, so the user would otherwise have to pass in the proxy settings on every command, or set an environment variable or somesuch — way too much hassle.
So I thought, everyone’s browser will usually already be set up properly, proxy configured and everything. This will be true for even the most basic user because otherwise ‘their internet wouldn’t work’.
So I figure that I can find out whether to use a proxy by looking at IE’s proxy settings.
How do I go about this? More specifically:
- Is there one set of ‘proxy settings’ in Windows, used by all browsers (probably IE’s), or would I have to write different routines for IE, Firefox, Opera, etc?
- I know that I can probably read the values directly out of the appropriate registry locations if they are configured manually, but does this also work with ‘automatically detect proxy server?’ Do I even have to bother with that option, or is it (almost) never used?
Before people start suggesting alternatives: I’m using C, so I’m limited to the Win32 API, and I really really want to keep using C and libcurl.
The function you’re looking for is WinHttpGetIEProxyConfigForCurrentUser(), which is documented at http://msdn.microsoft.com/en-us/library/aa384096(VS.85).aspx. This function is used by Firefox and Opera to get their proxy settings by default, although you can override them per-browser. Don’t do that, though. The right thing to do (which is what everybody else does) is to just get the IE settings and assume that they’re correct, since they almost always are.
Here’s a sample of the relevant logic, which you should adapt for your needs: