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

