返回介绍

获取 HTTP 请求的 IP 地址

发布于 2023-06-25 22:01:52 字数 1934 浏览 0 评论 0 收藏 0

这篇文章演示了如何在Go中获取传入HTTP请求的IP地址。作为一种功能,它尝试使用X-FORWARDED-FORhttp头作为代理和负载均衡器(例如在Heroku之类的主机上)后面的代码,而RemoteAddr如果找不到该头,则会尝试使用http头。

举个例子,我们在下面创建了一个(各种各样的)回显服务器,以json形式使用请求的IP地址回复传入的请求。

package main

import (
    "encoding/json"
    "net/http"
)

func main() {
    http.HandleFunc("/", ExampleHandler)
    if err := http.ListenAndServe(":8080", nil); err != nil {
        panic(err)
    }
}

func ExampleHandler(w http.ResponseWriter, r *http.Request) {
    w.Header().Add("Content-Type", "application/json")
    resp, _ := json.Marshal(map[string]string{
        "ip": GetIP(r),
    })
    w.Write(resp)
}

// GetIP gets a requests IP address by reading off the forwarded-for
// header (for proxies) and falls back to use the remote address.
func GetIP(r *http.Request) string {
    forwarded := r.Header.Get("X-FORWARDED-FOR")
    if forwarded != "" {
        return forwarded
    }
    return r.RemoteAddr
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文