From bd58f3c7476021e0343749849411f511ab9a93f5 Mon Sep 17 00:00:00 2001
From: Tufan Baris Yildirim <tufanbarisyildirim@gmail.com>
Date: Wed, 18 Sep 2019 13:10:53 +0300
Subject: [PATCH] force dialer to connect the host specified in req.URL.Host
 not in req.Host!

---
 utils/utils.go | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/utils/utils.go b/utils/utils.go
index 348cb02f..91a64bda 100644
--- a/utils/utils.go
+++ b/utils/utils.go
@@ -16,6 +16,7 @@
 package utils
 
 import (
+	"context"
 	"crypto/tls"
 	"errors"
 	"fmt"
@@ -24,6 +25,7 @@ import (
 	"io/ioutil"
 	"math"
 	"math/rand"
+	"net"
 	"net/http"
 	"os"
 	"os/exec"
@@ -298,6 +300,11 @@ func HttpRequest(url, method string, content interface{}, headers []string, body
 	}
 	var resp *http.Response
 
+	dialer := &net.Dialer{
+		Timeout:   30 * time.Second,
+		KeepAlive: 30 * time.Second,
+	}
+
 	transport := &http.Transport{
 		TLSClientConfig: &tls.Config{
 			InsecureSkipVerify: !verifySSL,
@@ -307,6 +314,11 @@ func HttpRequest(url, method string, content interface{}, headers []string, body
 		ResponseHeaderTimeout: timeout,
 		TLSHandshakeTimeout:   timeout,
 		Proxy:                 http.ProxyFromEnvironment,
+		DialContext: func(ctx context.Context, network, addr string) (net.Conn, error) {
+			// redirect all connections to host specified in url
+			addr = req.URL.Host
+			return dialer.DialContext(ctx, network, addr)
+		},
 	}
 	client := &http.Client{
 		Transport: transport,