2015-10-26 1 views
-3

У меня есть маршрутизатор Gorilla Mux, установленный в Go. У меня есть маршруты, установленные в этом маршрутизаторе, а также обработчики функций, связанные с этими маршрутами. Маршрутизатор работает отлично, , если вы открываете окно браузера и вводите конкретные URL-адреса. Однако проблема, с которой я сталкиваюсь, - это что делать, если URL-адрес введен в командной строке. Я знаю, как сохранить URL-адрес из аргументов командной строки, но я не знаю, как перенаправить URL-адрес, который хранится в качестве переменной URL в Go, на маршрутизатор. Как, как вы называете обработчик функции маршрута, если URL-адрес указан в командной строке INSTEAD из введенного через окно браузера?Как позвонить/открыть URL-адрес в методе Go?

Код:

u, err := url.Parse(os.Args[1]) 
if err != nil { 
    fmt.Println(err.Error()) 
} 

host, port, _ := net.SplitHostPort(u.Host) 

s := []string{":", port}; 

router := ANewRouter() 

log.Fatal(http.ListenAndServe(strings.Join(s, ""), router)) 

//Route URL to router, somehow 
+1

Вы спрашиваете, как использовать что-то вроде 'curl', чтобы сделать запрос из командной строки? – JimB

+0

@JimB Нет, определенно не это. Этот вопрос, как правило, довольно запутанный. Это больше похоже на то, что URL-адрес указывается в командной строке так: «go run» .go -url = «http: // localhost: 8080/something», где приложение go анализирует URL-адрес URL-адреса – AbhishekSaha

+0

. были бы полезны –

ответ

1

Если вы пытаетесь сделать запрос HTTP в Go есть легко использовать методы для этой цели в стандартной библиотеке; https://golang.org/pkg/net/http/

Как отметил JimB в комментарии, вы можете использовать что-то вроде curl и просто отказаться от использования Go в целом. Запуск curl от Go не имеет для меня большого смысла, когда вы можете просто сделать resp, err := http.Get(urlArg) и получить тот же результат. Существуют также методы для других HTTP-глаголов, и если вам нужно более точное настроенное управление запросом, вы можете использовать метод Do и создать объект Request, чтобы делать такие вещи, как заданные заголовки.

+0

Это не сработало. Я сделал: http.Get («http: // localhost: 8080/list») И ничего не произошло. Я ввел «http: // localhost: 8080/list» в браузер, и он вызвал вызов API – AbhishekSaha

+3

@AbhishekSaha, чтобы вы использовали 'http: // localhost: 8080/list' для вашего запроса в Go. Затем проверьте значение 'err' и' resp'. Если 'err' не равен нулю, вы получите 200 и можете продолжить чтение тела ответа. Попробуйте распечатать его на консоли для отладки. Я гарантирую, что этот метод будет делать то, что вы хотите, если будете использовать его правильно. – evanmcdonnal

+0

Если я попробую вызвать http.Get после запуска маршрутизатора, он не будет вызван. Если я попробую вызвать http.Get до запуска маршрутизатора, я получаю эту ошибку: «getsockopt: connection failed». Я запускаю маршрутизатор так: «log.Fatal (http.ListenAndServe («: 8080 », маршрутизатор))« – AbhishekSaha

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