Prenez l'habitude d'écrire ensemble ! C'est le 10ème jour de ma participation au "Nuggets Daily New Plan · April Update Challenge", cliquez pour voir les détails de l'événement .
avant-propos
Ce sujet de script est principalement destiné à enregistrer certains problèmes et réflexions sur l'utilisation de golang. Bien sûr, certaines parties privées seront bloquées et seule une petite partie du contenu sera donnée. L'essentiel aujourd'hui, ce sont les requêtes http. Les requêtes HTTP sont composées de requêtes et de réponses.
Requête HTTP
La bibliothèque net/http est fournie dans Golang, et vous pouvez faire des requêtes http GET, POST, etc. directement via cette bibliothèque.
// 不带参数的 get 请求
resp, err := http.Get("https://www.test.yuanyuzhou.com/")
// 带参数的 get 请求,可以使用 newRequest
resp, err := http.NewRequest(http.MethodGet, url, nil)
params := resp.URL.Query()
params.add(key,value)
// Post 请求
resp, err := http.Post("https://www.test.yuanyuzhou.com","application/json",string.NewReader("key=value"))
// 如果需要设置头参数
resp.Header.Set("Cookie","saushajshauydia")
// Form 提交表单
params := url.Values{key:value}
http.PostForm("http://" ,params)
复制代码
Réponse HTTP
La réponse se compose de trois parties :
- Ligne de réponse : protocole, code d'état de la réponse et description de l'état
- En-tête de réponse : contient diverses informations sur le champ d'en-tête, telles que les cookies
- Corps de la réponse : contient les données souhaitées par le client
Dans le package net/http de Golang, la réponse http est encapsulée dans la structure http.ResponseWriter
type ResponseWriter interface {
Header() Header
Write([]byte) (int, error)
WriteHeader(statusCode int)
}
复制代码
- En-tête : utilisé pour définir/obtenir toutes les informations d'en-tête de réponse
- Writer : utilisé pour écrire des données dans l'entité de réponse
- WriterHeader : utilisé pour définir le code d'état de la réponse
réponse renvoyée
Il existe de nombreux types de résultats de réponse à la demande, et nous renvoyons souvent le format json, des informations textuelles ou une redirection.
texte de retour
func responseBack(w http.ResponseWriter, r *http.Request){
w.Write([]byte("我是返回文本结果"))
}
复制代码
Renvoie les données au format JSON
type ResJson struct {
Code string `json:code`
Message string `json:message`
}
resJson := ResJson{
200,
"返回 Json 格式数据"
}
w.Header().Set("Content-Type", "application/json")
w.Write(json.Marshal(resJson))
复制代码
Lorsque vous renvoyez des données au format Json, vous devez définir le contentType de l'en-tête sur application/json
, donc le résultat renvoyé est au format json
réorienter
func Redirect(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Location", "https://xueyuanjun.com")
w.WriteHeader(301)
}
复制代码
Il convient de noter que la demande de redirection n'a pas besoin de définir l'entité de réponse, et il convient de noter qu'elle w.Header().Set
doit être w.WriteHeader
appelée w.WriteHeader
avant , l'en-tête de réponse ne peut pas être défini.