2015-10-26 118 views
-3

我有一個Gorilla Mux路由器在Go中設置。我有在該路由器中設置的路由,以及與這些路由相關的函數處理程序。路由器完美工作,如果您打開瀏覽器窗口並輸入特定的URL。但是,我遇到的問題是如果在命令行中輸入URL,該怎麼辦。我知道如何從命令行參數中存儲URL,但我不知道如何將URL作爲URL中的URL存儲到路由器中。比如,如果在通過瀏覽器窗口輸入的命令行INSTEAD上給出URL,那麼如何調用路由的函數處理程序?如何在Go方法中調用/打開URL?

代碼:

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請求有易於使用的方法在標準庫的目的; https://golang.org/pkg/net/http/

正如JimB在評論中指出的那樣,您可以使用類似curl的東西,並且完全放棄使用Go。如果您只需執行resp, err := http.Get(urlArg)並獲得相同的結果,則從Go啓動curl對我來說沒有多大意義。還有其他HTTP動詞的方法,如果您需要對請求進行更精細的調整控制,則可以使用Do方法並創建Request對象來執行諸如設置標題之類的操作。

+0

這沒有奏效。我做了: http.Get(「http:// localhost:8080/list」) 沒有發生任何事情。我在瀏覽器中輸入「http:// localhost:8080/list」,並調用API調用 – AbhishekSaha

+3

@AbhishekSaha確保在Go中使用'http:// localhost:8080/list'作爲請求。然後檢查「err」和「resp」的值。如果'err'不是零,你得到一個200,並且可以繼續閱讀響應主體。嘗試將其打印到控制檯進行調試。如果你正確地使用它,我保證該方法能夠做到你想要的。 – evanmcdonnal

+0

如果我在啓動路由器後嘗試http.Get調用,它不會被調用。如果我在啓動路由器之前嘗試http.Get調用,則會出現此錯誤:「getsockopt:連接被拒絕」。 我開始這樣的路由器:「log.Fatal(http.ListenAndServe(」:8080「,router))」 – AbhishekSaha