2017-03-31 24 views
-1

假設我有一個HTTP請求的表示形式,如下所示:method,URI,query params,headers,body。根據組成部分構建HTTP請求

所以我可能是這樣的:

Method: POST 
Headers: [Content-Type: application/json, Host: localhost:8080, etc...] 
Path: /home/sweet 
Query: name=dan&id=1 
Body: "some JSON here" 

我如何能重建成一個有效的網絡/ HTTP請求的對象呢?我想避免字符串格式化和儘可能多的構建。

回答

4

真的只有一種方法可以創建http.Request,那就是http.NewRequest。它已經將三個組成部分作爲參數:方法,路徑和正文。

在調用NewRequest之前,您需要將您的查詢參數組裝到URL中。 url包,特別是url.Values可能對此有幫助。

一旦你有了新的要求,您可以添加標題正如你所期望:

req, err := http.NewRequest("GET", "http://example.com/?foo=bar", body) 
req.Header.Add("Content-Type", "application/json") 

而如果它需要指出,人體必須的io.Reader,但是,讓你完全的靈活性。

+0

如果可能的話,我會喜歡避免字符串構建。在你的例子中,我必須連接主機頭與路徑,並添加該方案。 – Dumitru

+0

'url'包可以幫助你。它可以爲你做URL編碼/連接。這是否更容易取決於你如何接收查詢參數。 – Flimzy