亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將 URL 作為 URL 參數傳遞

將 URL 作為 URL 參數傳遞

Go
米脂 2022-09-05 15:48:57
我有這個用路由參數編寫的路由/properties/configurations/:name/:value當我使用URL作為這樣的值進行調用時/properties/configurations/app.url/http://test.test它沒有擊中我的狂歡控制器,我猜是因為斜杠混淆了它。我在使用incodeURIComponent()調用Javascript請求時進行了嘗試,因此它刪除了斜杠和其他有問題的字符,但它仍然沒有擊中控制器并給出404。問題是它在公共API中使用,我無法更改它以在正文中傳遞此數據,因此我試圖弄清楚如何使狂歡識別模式并正確將值放在{name}和{value}中。
查看完整描述

2 回答

?
人到中年有點甜

TA貢獻1895條經驗 獲得超7個贊

您只需要使用其中一個轉義函數:


package main

import "net/url"


func main() {

   s := "http://test.test"

   {

      t := url.PathEscape(s)

      println(t == "http:%2F%2Ftest.test")

   }

   {

      t := url.QueryEscape(s)

      println(t == "http%3A%2F%2Ftest.test")

   }

}

https://golang.org/pkg/net/url#PathEscape

https://golang.org/pkg/net/url#QueryEscape


查看完整回答
反對 回復 2022-09-05
?
搖曳的薔薇

TA貢獻1793條經驗 獲得超6個贊

如果您能夠將 URL 編碼的 URL 作為路徑變量傳遞給 Golang 服務器,則可以通過 運行它。url.PathUnescape(str)


如果問題是您的路由器由于路徑變量中的字符未正確匹配而未到達正確的處理程序,則可能是您錯誤地定義了該路徑匹配器。我沒有狂歡的經驗,但是對于(github.com/gorilla/mux),我希望它看起來像下面這樣:mux


package main


import (

    "net/http"

    "net/url"

    "github.com/gorilla/mux"

)


func main() {


    r := mux.NewRouter()

    r.HandleFunc("/properties/configurations/app.url/{nestedURL:.*}", myHandler)

 

    http.ListenAndServe(":8080", r)


}


func myHandler(w http.ResponseWriter, r *http.Request){

    nestedURL := mux.Vars(r)["nestedURL"]

    unescapedPath, err := url.PathUnescape(nestedURL)

    if err != nil {

        // handle err

    }

}

上面的示例甚至可能不需要您對嵌套URL進行URL編碼(但我確實建議您對其進行URL編碼)。


查看完整回答
反對 回復 2022-09-05
  • 2 回答
  • 0 關注
  • 235 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號