[Ecrire un script golang] 03- Requête HTTP

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().Setdoit être w.WriteHeaderappelée w.WriteHeaderavant , l'en-tête de réponse ne peut pas être défini.

Je suppose que tu aimes

Origine juejin.im/post/7085361528177688590
conseillé
Classement