golang如何用http.NewRequest創(chuàng)建get和post請求
golang用http.NewRequest創(chuàng)建get和post請求
在Go語言中,使用http.NewRequest
函數(shù)可以創(chuàng)建GET和POST請求。
下面是一個(gè)示例代碼,演示如何使用http.NewRequest
創(chuàng)建GET和POST請求:
package main import ( "fmt" "io/ioutil" "net/http" ) func main() { // 創(chuàng)建GET請求 getRequest, err := http.NewRequest("GET", "https://api.example.com/data", nil) if err != nil { fmt.Println("創(chuàng)建GET請求失敗:", err) return } // 發(fā)送GET請求并獲取響應(yīng) client := &http.Client{} getResponse, err := client.Do(getRequest) if err != nil { fmt.Println("發(fā)送GET請求失敗:", err) return } defer getResponse.Body.Close() // 讀取GET響應(yīng)的內(nèi)容 getResponseBody, err := ioutil.ReadAll(getResponse.Body) if err != nil { fmt.Println("讀取GET響應(yīng)失敗:", err) return } // 打印GET響應(yīng)的內(nèi)容 fmt.Println(string(getResponseBody)) // 創(chuàng)建POST請求 postData := []byte(`{"key1": "value1", "key2": "value2"}`) postRequest, err := http.NewRequest("POST", "https://api.example.com/data", bytes.NewBuffer(postData)) if err != nil { fmt.Println("創(chuàng)建POST請求失敗:", err) return } postRequest.Header.Set("Content-Type", "application/json") // 設(shè)置請求頭,指定內(nèi)容類型為JSON // 發(fā)送POST請求并獲取響應(yīng) postResponse, err := client.Do(postRequest) if err != nil { fmt.Println("發(fā)送POST請求失敗:", err) return } defer postResponse.Body.Close() // 讀取POST響應(yīng)的內(nèi)容 postResponseBody, err := ioutil.ReadAll(postResponse.Body) if err != nil { fmt.Println("讀取POST響應(yīng)失敗:", err) return } // 打印POST響應(yīng)的內(nèi)容 fmt.Println(string(postResponseBody)) }
在上述示例中,我們首先創(chuàng)建了一個(gè)GET請求,指定了請求的URL為"https://api.example.com/data"。
然后,我們使用http.Client
類型的客戶端發(fā)送該請求,并獲取響應(yīng)。
對于POST請求,我們創(chuàng)建了一個(gè)包含JSON數(shù)據(jù)的請求主體,并設(shè)置了請求頭的"Content-Type"字段為"application/json"。
然后,我們使用相同的客戶端發(fā)送該請求,并獲取響應(yīng)。
最后,我們讀取并打印了GET和POST響應(yīng)的內(nèi)容。
go post 調(diào)用http.NewRequest出現(xiàn)錯(cuò)誤:400 bad request踩坑
問題
使用go語言的http.NewRequest
函數(shù)調(diào)用接口,該函數(shù)可帶有post參數(shù)
但是一直出現(xiàn)錯(cuò)誤:400 bad request
看網(wǎng)上解決都是說輸入格式等問題,但是查詢json結(jié)構(gòu)體等信息并無錯(cuò)誤。
解決
問題出在這條語句:
req, err := http.NewRequest("Post", url, bytes.NewBuffer(data))
第一個(gè)參數(shù)method真正的參數(shù)應(yīng)該是POST
,都是大寫。
這很坑,或者說很容易忽略這個(gè)問題,如果不小心寫錯(cuò)的話,一般不會(huì)把問題考慮到這,而是瘋狂去看json格式是否符合,那么問題就得很久才能解決了。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Go+Redis緩存設(shè)計(jì)與優(yōu)化實(shí)現(xiàn)
本文主要介紹了Go+Redis緩存設(shè)計(jì)與優(yōu)化實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02Go語言實(shí)現(xiàn)管理多個(gè)數(shù)據(jù)庫連接
在軟件開發(fā)過程中,使用?MySQL、PostgreSQL?或其他數(shù)據(jù)庫是很常見的,由于配置和要求不同,管理這些連接可能具有挑戰(zhàn)性,下面就來和大家聊聊如何在Go中管理多個(gè)數(shù)據(jù)庫連接吧2023-10-10golang語言如何將interface轉(zhuǎn)為int, string,slice,struct等類型
這篇文章主要介紹了golang語言如何將interface轉(zhuǎn)為int, string,slice,struct等類型,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12Golang 使用接口實(shí)現(xiàn)泛型的方法示例
這篇文章主要介紹了Golang 使用接口實(shí)現(xiàn)泛型的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03