golang如何用http.NewRequest創(chuàng)建get和post請求
golang用http.NewRequest創(chuàng)建get和post請求
在Go語言中,使用http.NewRequest函數(shù)可以創(chuàng)建GET和POST請求。
下面是一個示例代碼,演示如何使用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)建了一個GET請求,指定了請求的URL為"https://api.example.com/data"。
然后,我們使用http.Client類型的客戶端發(fā)送該請求,并獲取響應(yīng)。
對于POST請求,我們創(chuàng)建了一個包含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)錯誤:400 bad request踩坑
問題
使用go語言的http.NewRequest函數(shù)調(diào)用接口,該函數(shù)可帶有post參數(shù)
但是一直出現(xiàn)錯誤:400 bad request
看網(wǎng)上解決都是說輸入格式等問題,但是查詢json結(jié)構(gòu)體等信息并無錯誤。
解決
問題出在這條語句:
req, err := http.NewRequest("Post", url, bytes.NewBuffer(data))第一個參數(shù)method真正的參數(shù)應(yīng)該是POST,都是大寫。
這很坑,或者說很容易忽略這個問題,如果不小心寫錯的話,一般不會把問題考慮到這,而是瘋狂去看json格式是否符合,那么問題就得很久才能解決了。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Go+Redis緩存設(shè)計與優(yōu)化實現(xiàn)
本文主要介紹了Go+Redis緩存設(shè)計與優(yōu)化實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02
Go語言實現(xiàn)管理多個數(shù)據(jù)庫連接
在軟件開發(fā)過程中,使用?MySQL、PostgreSQL?或其他數(shù)據(jù)庫是很常見的,由于配置和要求不同,管理這些連接可能具有挑戰(zhàn)性,下面就來和大家聊聊如何在Go中管理多個數(shù)據(jù)庫連接吧2023-10-10
golang語言如何將interface轉(zhuǎn)為int, string,slice,struct等類型
這篇文章主要介紹了golang語言如何將interface轉(zhuǎn)為int, string,slice,struct等類型,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12

