[Escrever um script golang] 03- Solicitação Http

Adquira o hábito de escrever juntos! Este é o 10º dia da minha participação no "Nuggets Daily New Plan · April Update Challenge", clique para ver os detalhes do evento .

prefácio

Este tópico de script é principalmente para registrar alguns problemas e pensamentos sobre o uso do golang. Claro, algumas partes privadas serão bloqueadas e apenas uma pequena parte do conteúdo será fornecida. A principal coisa hoje são solicitações http. As solicitações HTTP são compostas de solicitações e respostas.

solicitação HTTP

A biblioteca net/http é fornecida em Golang, e você pode fazer solicitações http GET, POST, etc. diretamente através desta biblioteca.

// 不带参数的 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)
复制代码

Resposta HTTP

A resposta consiste em três partes:

  • Linha de resposta: protocolo, código de status de resposta e descrição de status
  • Cabeçalho de resposta: contém várias informações de campo de cabeçalho, como cookies
  • Corpo de resposta: carregue os dados que o cliente deseja

No pacote net/http de Golang, a resposta http é encapsulada na estrutura http.ResponseWriter

type ResponseWriter interface {
    Header() Header            
    Write([]byte) (int, error) 
    WriteHeader(statusCode int)
}
复制代码
  • Header : usado para definir/obter todas as informações do cabeçalho de resposta
  • Writer : usado para gravar dados na entidade de resposta
  • WriterHeader : usado para definir o código de status de resposta

resposta retornada

Existem muitos tipos de resultados de resposta da solicitação e geralmente retornamos o formato json, informações de texto ou redirecionamento.

retornar texto

func responseBack(w http.ResponseWriter, r *http.Request){
  w.Write([]byte("我是返回文本结果"))
}
复制代码

Retorna dados no formato 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))
​
复制代码

Ao retornar dados no formato Json, você precisa definir o contentType do cabeçalho para application/json

, então o resultado retornado está no formato json

redirecionar

func Redirect(w http.ResponseWriter, r *http.Request)  {
    w.Header().Set("Location", "https://xueyuanjun.com")
    w.WriteHeader(301)
}
复制代码

Deve-se notar que a solicitação de redirecionamento não precisa definir a entidade de resposta, e deve-se notar que ela w.Header().Setdeve ser w.WriteHeaderchamada w.WriteHeaderantes , o cabeçalho de resposta não pode ser definido.

Acho que você gosta

Origin juejin.im/post/7085361528177688590
Recomendado
Clasificación