Menu Close

Go – HTTP ProxyFromEnvironment Function in Go

In this article, we will explore the http ProxyFromEnvironment function in Go net/http package in detail, along with examples.


The http.ProxyFromEnvironment function is a powerful tool in the Go programming language, allowing developers to use the system’s environment variables to configure an HTTP proxy. This article provides an in-depth look at this function, including how it works, how to use it, and a step-by-step example to demonstrate its implementation in a real-world scenario.

Background: What is a Proxy?

A proxy server is an intermediate server that sits between the client and the target server, forwarding requests and responses between them. Proxies can be used to improve performance, provide security, or bypass network restrictions. By using an HTTP proxy, you can control the flow of requests and responses between your application and the internet.

The http.ProxyFromEnvironment Function in Go

The http.ProxyFromEnvironment function in Go’s net/http package is a convenient way to configure an HTTP proxy using environment variables. The function is defined as follows:


func ProxyFromEnvironment(req *Request) (*url.URL, error)

It takes an HTTP request as input and returns a URL for the proxy server if one is configured, or an error if there’s an issue.

The function checks for the following environment variables, in order of precedence:

  • HTTP_PROXY or http_proxy: Used for HTTP requests.
  • HTTPS_PROXY or https_proxy: Used for HTTPS requests.
  • NO_PROXY or no_proxy: A comma-separated list of hosts that should bypass the proxy.

Example Usage

To use the http.ProxyFromEnvironment function, you need to configure the http.Transport structure, which manages the details of making requests over HTTP. Here’s an example:

package main

import (

func main() {
	client := &http.Client{
		Transport: &http.Transport{
			Proxy: http.ProxyFromEnvironment,

	response, err := client.Get("")
	if err != nil {
		fmt.Println("Error:", err)

	defer response.Body.Close()
	body, err := ioutil.ReadAll(response.Body)
	if err != nil {
		fmt.Println("Error:", err)


In this example, we create a new http.Client with a custom http.Transport, which has the Proxy field set to http.ProxyFromEnvironment. This means that the client will use the environment variables to configure the proxy when making requests.

Example: Setting Environment Variables

You can set the environment variables directly in your shell or programmatically in your Go code. Here’s how to set the HTTP_PROXY and NO_PROXY variables in your shell:

export HTTP_PROXY=
export NO_PROXY=localhost,

Alternatively, you can set these variables in your Go code:

os.Setenv("HTTP_PROXY", "")
os.Setenv("NO_PROXY", "localhost,")


The http.ProxyFromEnvironment function in Go provides a simple way to configure an HTTP proxy using environment variables. By understanding and utilizing this function, you can easily manage and configure proxy settings in your Go applications. Remember to pay attention to the order of precedence when configuring multiple environment variables, and don’t forget to handle any errors that may occur.

To check more Go related articles. Pls click given below link:

Posted in golang, net, packages

Leave a Reply

Your email address will not be published. Required fields are marked *