Url Escape-параметр не разрешается должным образом - PullRequest
1 голос
/ 17 апреля 2019

Я сгенерировал простой gorilla/mux API, используя swagger. Для моей единственной конечной точки /v1/abc/{arg} я передаю аргумент.

Поэтому запрос типа: http://localhost:9090/v1/abc/hello пока просто повторяет аргумент. Следующая функция обрабатывает запрос:

func GetAbcByArg(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json; charset=UTF-8")
    vars := mux.Vars(r)
    arg, _ := url.QueryUnescape(vars["arg"])
    log.Printf("arg %s", arg)
    w.WriteHeader(http.StatusOK)
    fmt.Fprintf(w, "%v\n", arg)
}

Пока все хорошо. Однако всякий раз, когда я пытаюсь передать некоторые специальные символы в качестве аргумента, я получаю ошибку 404, и обработчик не вызывается. Хотя я мог просто избежать аргумента, полностью экранируя символы URL (rfc3986), но это также не работает. Зачем? Как подготовить любую строку, чтобы передать ее в одном элементе?

Примеры:

http://localhost:9090/v1/abc/hello работает как положено

http://localhost:9090/v1/abc/123/xyz не работает должным образом

http://localhost:9090/v1/abc/a.x работает как положено

http://localhost:9090/v1/abc/https://google.com не работает должным образом

http://localhost:9090/v1/abc/https%3A%2F%2Fgoogle.com не работает, но почему ?

UPDATE

Настройка маршрута:

var routes = Routes{
    Route{
        "GetAbcByArg",
        strings.ToUpper("Get"),
        "/v1/abc/{arg}",
        GetAbcByArg,
    },
}

Ответы [ 2 ]

0 голосов
/ 17 апреля 2019

Работает с

router := mux.NewRouter().SkipClean(true).UseEncodedPath()

ref: https://github.com/gorilla/mux/blob/master/mux.go

0 голосов
/ 17 апреля 2019

Замена одного из / на этом адресе страниц все еще указывает на эту страницу:

https://stackoverflow.com/questions/55716545%2Furl-escaped-parameter-not-resolving-properly

Так что я думаю

http://localhost:9090/v1/abc/https%3A%2F%2Fgoogle.com

рассматривается как http://localhost:9090/v1/abc/https%3A//google.com

По вашему роутеру, и кажется, что после abc * 1014 он не может допускать более одной части

...