2015-06-05 4 views
2

Я хочу, чтобы получить URL как получить aparameterGolang: Передача URL в качестве параметра GET

пример: example.com?domain=site.come?a=val & б = валь

проблема, когда я использую

query := r.URL.Query() 
domain := query.Get("domain") 

, чтобы получить имя домена, который он даст только домен = site.come? а = вал

Я думаю, потому что, когда г .URL.Query() встречаются & это рассматривать его как новый параметр

ли кто-нибудь знает, как я могу решить эту проблему

Спасибо заранее.

ответ

3

Вы должны URL-Кодируйте строку запроса, like this:

package main 

import (
    "fmt" 
    "net/url" 
) 

func main() { 
    query := make(url.Values) 
    query.Add("domain", "example.com?foo=bar") 

    fmt.Println(query.Encode()) 
} 

Какие выходы domain=example.com%3Ffoo%3Dbar.

Вы можете установить эту строку как RawQuery значения url.URL, и если вы затем получите запрос, как и вы, то оно будет иметь правильное значение.

Если URL правильно закодирован, то вы должны быть в состоянии запустить following code с значением URL и получить правильный результат:

package main 

import (
    "fmt" 
    "net/url" 
) 

func main() { 
    query := make(url.Values) 
    query.Add("domain", "example.com?foo=bar&abc=123&jkl=qwe") 

    url := &url.URL{RawQuery: query.Encode(), Host: "domain.com", Scheme: "http"} 
    fmt.Println(url.String()) 

    abc := url.Query().Get("domain") 
    fmt.Println(abc) 
} 

Печатается:

http://domain.com?domain=example.com%3Ffoo%3Dbar%26abc%3D123%26jkl%3Dqwe 

(полный URI с кодированным параметром под названием «домен»)

example.com?foo=bar&abc=123&jkl=qwe 

(декодер ed значение указанного параметра)

+0

Я не тот, кто посылает Url, я просто получаю от другой службы – abdel

+2

Тогда вам придется работать с тем, что у вас есть (разрезание 'domain = site.come? a = val ') или позвоните другому парню и скажите ему исправить его код, потому что его строка запроса недействительна. – thwd

+0

Он сделал изменение, он закодировал URL-адрес и по-прежнему та же проблема, когда я получил домен, который мне дал просто ** domain = site.come? A = val ** без ** & b = val ** – abdel

Смежные вопросы