I have a SOCKS proxy that is accessible at in my local network. I redirected my internet traffic to it in my Wifi System Preferences. This works fine, GUI applications use it. However I'm not able to use the proxy inside the terminal through environment variables. Only setting it explicitly works.

In other words, this works

curl --socks5-hostname https://apple.stackexchange.com

But this doesn't work

# exports are also in ~/.zshrc
export HTTP_PROXY="socks5://"
export http_proxy="socks5://"
export HTTPS_PROXY="socks5://"
export https_proxy="socks5://"
export ALL_PROXY="socks5://"

curl https://apple.stackexchange.com

This is not just the case for curl but also other applications such as git.

  • 1
    Looks like you're not using the documented "socks5h://" from the man page, specified as the equivalent to --socks5-hostname. Any particular reason? – Marc Wilson Oct 26 '19 at 20:17
  • It works with "socks5h://", at least for some applications. You can write an answer if you'd like. What's the difference between h and non-h actually? – TomTom Oct 27 '19 at 7:56

If you're passing --sox5-hostname, then the equivalent in environment variables is "socks5h://", per the man page for curl(1):

       Since curl version 7.21.7, the proxy string may be specified with a  protocol://  prefix  to  specify
       alternative proxy protocols.

       If  no  protocol is specified in the proxy string or if the string doesn't match a supported one, the
       proxy will be treated as an HTTP proxy.

       The supported proxy protocol prefixes are as follows:

              Makes it the equivalent of --socks4

              Makes it the equivalent of --socks4a

              Makes it the equivalent of --socks5

              Makes it the equivalent of --socks5-hostname

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .