"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكنني ربط عميل Go HTTP بعنوان IP محدد؟

كيف يمكنني ربط عميل Go HTTP بعنوان IP محدد؟

تم النشر بتاريخ 2024-11-10
تصفح:141

How Can I Bind a Go HTTP Client to a Specific IP Address?

ربط عميل http. بعنوان IP في Go

في مجال الحوسبة الموزعة، غالبًا ما يكون من الضروري التحكم في عنوان IP المصدر العنوان الذي تنشأ منه طلبات HTTP. مع وجود بطاقات NIC متعددة على جهاز عميل، يمكن أن تكون هذه التفاصيل ضرورية.

ضع في اعتبارك كود عميل HTTP الأساسي التالي:

package main

import "net/http"

func main() {
    webclient := &http.Client{}
    req, _ := http.NewRequest("GET", "http://www.google.com", nil)
    httpResponse, _ := webclient.Do(req)
    defer httpResponse.Body.Close()
}

لربط هذا العميل بعنوان NIC أو IP محدد، نحتاج إلى تعديل حقل النقل الخاص به. سوف نستخدم net.Transport مخصصًا يستخدم net.Dialer مخصصًا. يتيح لنا net.Dialer بدوره تحديد العنوان المحلي للاتصالات الصادرة.

import (
    "net"
    "net/http"
)

func main() {
    localAddr, err := net.ResolveIPAddr("ip", "")
    if err != nil {
        panic(err)
    }
    localTCPAddr := net.TCPAddr{
        IP: localAddr.IP,
    }

    webclient := &http.Client{
        Transport: &http.Transport{
            Proxy:                http.ProxyFromEnvironment,
            DialContext:          (&net.Dialer{LocalAddr: &localTCPAddr}).DialContext,
            MaxIdleConns:          100,
            IdleConnTimeout:       90 * time.Second,
            TLSHandshakeTimeout:   10 * time.Second,
            ExpectContinueTimeout: 1 * time.Second,
        },
    }
}

مع هذا التعديل، أصبح عميل HTTP الخاص بنا الآن مرتبطًا بعنوان IP المحدد، مما يضمن أن جميع الطلبات الصادرة تنشأ من بطاقة NIC المطلوبة.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3