今天就跟大家聊聊有关使用golang怎么获取URL,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
成都创新互联公司主要从事成都做网站、网站设计、网页设计、企业做网站、公司建网站等业务。立足成都服务兴宁,十年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792
在golang中的http.Request对象中的所有属性,没有可以直接获取完整URL的方法。但可以通过host和请求地址进行拼接。具体方法是在Request.Host中获取hostname,Request.RequestURI获取相应的请求地址。
对于协议的判断,如区分http还是https协议,一开始尝试通过r.Proto属性判断,但是发现该属性不管是http,还是https都是返回HTTP/1.1,又寻找了下发现TLS属性,在https协议下有对应值,在http下为nil。
主要技术点:
1.通过r.TLS是否为nil判断scheme是http或https:
r.TLS == nil ---> http
r.TLS != nil ---> https
2.通过r.Proto获取http版本号,例如:HTTP/1.1
3.通过r.Host获取地址及端口号,例如:localhost:9090或127.0.0.1:8000
4.通过r.RequestURI获取目录及参数,例如:/index?id=2
完整代码:
package main
import (
"fmt"
"log"
"net/http"
"strings"
)
func index(w http.ResponseWriter, r *http.Request) {
fmt.Println("--------------------")
fmt.Println(r.Proto)
// output:HTTP/1.1
fmt.Println(r.TLS)
// output:
fmt.Println(r.Host)
// output: localhost:9090
fmt.Println(r.RequestURI)
// output: /index?id=1
scheme := "http://"
if r.TLS != nil {
scheme = "https://"
}
fmt.Println(strings.Join([]string{scheme, r.Host, r.RequestURI}, ""))
// output: http://localhost:9090/index?id=1
}
func GetURL(r *http.Request)(Url string) {
scheme := "http://"
if r.TLS != nil {
scheme = "https://"
}
return strings.Join([]string{scheme, r.Host, r.RequestURI}, "")
}
func main() {
http.HandleFunc("/index", index)
err := http.ListenAndServe(":9090", nil)
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
看完上述内容,你们对使用golang怎么获取URL有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。