diff --git a/docs/netutil.md b/docs/netutil.md index fe861bc..82a90d8 100644 --- a/docs/netutil.md +++ b/docs/netutil.md @@ -22,16 +22,19 @@ import ( ## Index - [ConvertMapToQueryString](#ConvertMapToQueryString) +- [EncodeUrl](#EncodeUrl) - [GetInternalIp](#GetInternalIp) - [GetIps](#GetIps) - [GetMacAddrs](#GetMacAddrs) - [GetPublicIpInfo](#GetPublicIpInfo) +- [GetRequestPublicIp](#GetRequestPublicIp) - [IsPublicIP](#IsPublicIP) + +- [IsInternalIP](#IsInternalIP) - [HttpGet](#HttpGet) - [HttpDelete](#HttpDelete) - [HttpPost](#HttpPost) - [HttpPut](#HttpPut) - - [HttpPatch](#HttpPatch) - [ParseHttpResponse](#ParseHttpResponse) @@ -72,6 +75,35 @@ func main() { +### EncodeUrl +

Encode url query string values.

+ +Signature: + +```go +func EncodeUrl(urlStr string) (string, error) +``` +Example: + +```go +package main + +import ( + "fmt" + "github.com/duke-git/lancet/netutil" +) + +func main() { + urlAddr := "http://www.lancet.com?a=1&b=[2]" + encodedUrl, err := netutil.EncodeUrl(urlAddr) + if err != nil { + fmt.Println(err) + } + fmt.Println(encodedUrl) //http://www.lancet.com?a=1&b=%5B2%5D +} +``` + + ### GetInternalIp

Get internal ip information.

@@ -198,6 +230,48 @@ func main() { ``` +### GetRequestPublicIp +

Get http request public ip.

+ +Signature: + +```go +func GetRequestPublicIp(req *http.Request) string +``` +Example: + +```go +package main + +import ( + "fmt" + "github.com/duke-git/lancet/netutil" +) + +func main() { + ip := "36.112.24.10" + + request1 := http.Request{ + Method: "GET", + Header: http.Header{ + "X-Forwarded-For": {ip}, + }, + } + publicIp1 := netutil.GetRequestPublicIp(&request1) + fmt.Println(publicIp1) //36.112.24.10 + + request2 := http.Request{ + Method: "GET", + Header: http.Header{ + "X-Real-Ip": {ip}, + }, + } + publicIp2 := netutil.GetRequestPublicIp(&request2) + fmt.Println(publicIp2) //36.112.24.10 +} +``` + + ### IsPublicIP

Checks if a ip is public or not.

@@ -229,6 +303,36 @@ func main() { +### IsInternalIP +

Checks if an ip is intranet or not.

+ +Signature: + +```go +func IsInternalIP(IP net.IP) bool +``` +Example: + +```go +package main + +import ( + "fmt" + "net" + "github.com/duke-git/lancet/v2/netutil" +) + +func main() { + ip1 := net.ParseIP("127.0.0.1") + ip2 := net.ParseIP("36.112.24.10") + + fmt.Println(netutil.IsInternalIP(ip1)) //true + fmt.Println(netutil.IsInternalIP(ip2)) //false +} +``` + + + ### HttpGet

Send http get request.

diff --git a/docs/netutil_zh-CN.md b/docs/netutil_zh-CN.md index 8a597e4..9ce0c22 100644 --- a/docs/netutil_zh-CN.md +++ b/docs/netutil_zh-CN.md @@ -22,16 +22,19 @@ import ( ## 目录 - [ConvertMapToQueryString](#ConvertMapToQueryString) +- [EncodeUrl](#EncodeUrl) - [GetInternalIp](#GetInternalIp) - [GetIps](#GetIps) - [GetMacAddrs](#GetMacAddrs) - [GetPublicIpInfo](#GetPublicIpInfo) +- [GetRequestPublicIp](#GetRequestPublicIp) + - [IsPublicIP](#IsPublicIP) +- [IsInternalIP](#IsInternalIP) - [HttpGet](#HttpGet) - [HttpDelete](#HttpDelete) - [HttpPost](#HttpPost) - [HttpPut](#HttpPut) - - [HttpPatch](#HttpPatch) - [ParseHttpResponse](#ParseHttpResponse) @@ -72,6 +75,36 @@ func main() { +### EncodeUrl +

编码url query string的值

+ +函数签名: + +```go +func EncodeUrl(urlStr string) (string, error) +``` +例子: + +```go +package main + +import ( + "fmt" + "github.com/duke-git/lancet/netutil" +) + +func main() { + urlAddr := "http://www.lancet.com?a=1&b=[2]" + encodedUrl, err := netutil.EncodeUrl(urlAddr) + if err != nil { + fmt.Println(err) + } + fmt.Println(encodedUrl) //http://www.lancet.com?a=1&b=%5B2%5D +} +``` + + + ### GetInternalIp

获取内部ip

@@ -198,6 +231,49 @@ func main() { +### GetRequestPublicIp +

获取http请求ip

+ +函数签名: + +```go +func GetRequestPublicIp(req *http.Request) string +``` +例子: + +```go +package main + +import ( + "fmt" + "github.com/duke-git/lancet/netutil" +) + +func main() { + ip := "36.112.24.10" + + request1 := http.Request{ + Method: "GET", + Header: http.Header{ + "X-Forwarded-For": {ip}, + }, + } + publicIp1 := netutil.GetRequestPublicIp(&request1) + fmt.Println(publicIp1) //36.112.24.10 + + request2 := http.Request{ + Method: "GET", + Header: http.Header{ + "X-Real-Ip": {ip}, + }, + } + publicIp2 := netutil.GetRequestPublicIp(&request2) + fmt.Println(publicIp2) //36.112.24.10 +} +``` + + + ### IsPublicIP

判断ip是否是公共ip

@@ -228,6 +304,35 @@ func main() { +### IsInternalIP +

判断ip是否是局域网ip.

+ +函数签名: + +```go +func IsInternalIP(IP net.IP) bool +``` +例子: + +```go +package main + +import ( + "fmt" + "net" + "github.com/duke-git/lancet/netutil" +) + +func main() { + ip1 := net.ParseIP("127.0.0.1") + ip2 := net.ParseIP("36.112.24.10") + + fmt.Println(netutil.IsInternalIP(ip1)) //true + fmt.Println(netutil.IsInternalIP(ip2)) //false +} +``` + + ### HttpGet

发送http get请求