Не экранированные параметры запроса для URL - PullRequest
0 голосов
/ 20 января 2020

Я хочу создать параметр запроса без экранирования строки запроса.

Например, мне нужно создать параметр запроса q с содержанием

"before:{2019-12-24 19:57:34}"

, чтобы URL был

https://android-review.googlesource.com/changes/?q=before:{2019-12-24 19:57:34}

Если я использую этот код (Golang Детская площадка )

url, _ := url.Parse("https://android-review.googlesource.com/changes/")
q := url.Query()
q.Set("q", "before:{2019-12-24 19:57:34}")
url.RawQuery = q.Encode()
fmt.Println(url) 

url экранирует специальные символы, пробелы и скобки:

https://android-review.googlesource.com/changes/?q=before%3A%7B2019-12-24+19%3A57%3A34%7D

Как решить эту проблему кроме как вручную создать URL (без параметров запроса)?

1 Ответ

3 голосов
/ 20 января 2020

Если вы не хотите, чтобы ваш URL-запрос был закодирован, не используйте метод Encode(). Вместо этого непосредственно установите значение RawQuery:

url, _ := url.Parse("https://android-review.googlesource.com/changes/")
url.RawQuery = "q=before:{2019-12-24 19:57:34}"
fmt.Println(url)

Вывод:

https://android-review.googlesource.com/changes/?q=before:{2019-12-24 19:57:34}

детская площадка

Имейте в виду, однако, , что это рецепт для потенциальной катастрофы, в зависимости от того, как этот URL в конечном итоге используется. В частности, пробел в этом URL должен быть экранирован в соответствии с RF C. Подробнее здесь .

Возможно, вы захотите реализовать собственный минимальный выход, если он совместим с вашим вариантом использования.

...