Go’nun ortam tabanlı proxy seçicisinde localhost ve loopback IP hedefleri için yerleşik bir istisna vardır. NO_PROXY’yi boşaltmak bu istisnayı kaldırmaz. Bu nedenle, genel bir ana makine adına gönderilen istek beklendiği gibi proxy kullanırken yerel bir test doğrudan bağlanabilir.

Kural, isteğin hedefiyle ilgilidir. Kendi adresi 127.0.0.1 olan bir proxy dinleyicisini kullanmanıza engel değildir.

İstek göndermeden seçiciyi inceleyin

package main

import (
    "fmt"
    "net/http"
    "net/url"
)

func main() {
    fixed, _ := url.Parse("http://203.0.113.10:8080")
    for _, target := range []string{
        "http://localhost:8000/",
        "http://127.0.0.1:8000/",
        "http://example.com/",
    } {
        request, _ := http.NewRequest("GET", target, nil)
        discovered, err := http.ProxyFromEnvironment(request)
        explicit, _ := http.ProxyURL(fixed)(request)
        fmt.Println(target, discovered, explicit, err)
    }
}

Ortam karşılaştırmasını görmek istiyorsanız programı süreç için proxy değişkenleri ayarlanmış olarak çalıştırın. Program yalnızca seçicileri değerlendirir; belgeleme proxy’sine veya hedeflerin hiçbirine bağlanmaz.

Ortamdan keşif ile açıkça belirtilen seçici farklı politikalardır

ProxyFromEnvironment hedef şemasını, ortam ayarlarını ve özel loopback işlemesi dahil atlama kurallarını dikkate alır. ProxyURL, bu seçiciye iletilen her istek için verilen proxy URL’sini döndürür.

Bu yüzden açıkça belirtilen ProxyURL kullanan özel bir transport, yerel bir hedefe gönderilen isteği proxy üzerinden yönlendirebilir. Bu yalnızca proxy istenen hedefe meşru biçimde erişebildiğinde yararlıdır. Uzak proxy’nin localhost’u dizüstü bilgisayarınızın localhost’u değildir; dolayısıyla rotayı zorlamak kendiliğinden yararlı bir bağlantı testi oluşturmaz.

Süreç ortamını önbelleğe almadan önce kontrol edin

Standart net/http’nin ortam proxy yapılandırması ilk kullanımdan sonra önbelleğe alınır. Daha sonra aynı çalışan program içinde bir ortam değişkenini değiştirmek, yeni yapılandırma testini tekrarlamak için güvenilir bir yöntem değildir. İstenen değerlerle yeni bir süreç başlatın veya davranışını kontrol ettiğiniz açık bir seçici sağlayın.

Bu loopback davranışı Go 1.27.3’ün standart proxy seçicisi için geçerlidir. Diğer diller ve HTTP istemcileri farklı localhost yönlendirme kuralları kullanabilir.

İlgili makaleler