Rumah  >  Artikel  >  pembangunan bahagian belakang  >  golang menerima permintaan http

golang menerima permintaan http

王林
王林asal
2023-05-15 11:17:071514semak imbas

Golang ialah bahasa pengaturcaraan yang cekap dan ringkas dengan pelbagai aplikasi. Dari segi pembangunan Web, kecekapan tinggi Golang, konkurensi dan ciri-ciri lain memberikannya keupayaan berkuasa, jadi Golang telah menjadi salah satu teknologi popular untuk pembangunan Web. Artikel ini akan menganalisis cara menggunakan Golang untuk menerima permintaan HTTP.

1. Permintaan dan respons HTTP

Sebelum memahami penerimaan permintaan HTTP oleh Golang, mari kita fahami konsep asas permintaan dan respons HTTP.

Permintaan HTTP merujuk kepada operasi permintaan yang dihantar oleh klien ke pelayan, yang dibahagikan kepada bahagian berikut:

  • Barisan permintaan: termasuk kaedah HTTP, URL dan versi HTTP
  • Tajuk permintaan: Maklumat tambahan diminta, seperti maklumat pelanggan, maklumat pengesahan, dsb.
  • Isi permintaan: data yang dibawa oleh permintaan.

Respons HTTP merujuk kepada respons pelayan terhadap permintaan HTTP yang dikeluarkan oleh klien, yang dibahagikan kepada bahagian berikut:

  • Barisan respons: mengandungi versi HTTP, Status kod dan huraian status.
  • Pengepala respons: maklumat tambahan bagi respons, seperti maklumat pelayan, masa tamat tempoh, dsb.
  • Badan respons: kandungan respons.

2. Gunakan Golang untuk mengendalikan permintaan HTTP

Di Golang, kami boleh menggunakan pustaka net/http dengan mudah untuk mengendalikan permintaan HTTP. Pustaka ini menyediakan penghala HTTP lalai yang menghalakan permintaan secara dinamik berdasarkan URL yang diminta.

Berikut ialah contoh mudah yang menunjukkan cara menggunakan Golang untuk menerima permintaan HTTP:

package main

import (
    "fmt"
    "net/http"
)

func main() {
    http.HandleFunc("/", hello)
    http.ListenAndServe(":8080", nil)
}

func hello(w http.ResponseWriter, r *http.Request) {
    fmt.Println("Hello world")
    fmt.Fprintf(w, "Hello, %s!", r.URL.Path[1:])
}

Contoh ini menunjukkan cara menggunakan fungsi http.HandleFunc dalam Golang untuk mengendalikan permintaan HTTP. Fungsi ini menerima dua parameter:

  • Laluan URL yang diminta
  • Kaedah untuk mengendalikan permintaan (iaitu, fungsi panggil balik permintaan)

Dalam contoh ini, kami membenarkan semua permintaan diproses dengan memanggil fungsi hello. Fungsi ini akan mengeluarkan "Hello world" dan mengembalikan respons dengan kandungan "Hello, {path}!", dengan {path} ialah laluan yang diminta.

Kami menggunakan fungsi http.ListenAndServe untuk memulakan pelayan HTTP dan mendengar pada port 8080. Parameter kedua diluluskan penghala pelayan Apa yang kami luluskan di sini adalah nil, yang bermaksud penghala lalai digunakan.

3. Langkah khusus untuk memproses permintaan HTTP

Contoh di atas menunjukkan cara menggunakan Golang untuk menerima dan memproses permintaan HTTP. Sekarang, mari kita terangkan langkah pemprosesan khusus secara terperinci.

  1. Buat Penghala

Kita boleh menggunakan fungsi http.NewServeMux untuk mencipta penghala baharu. Fungsi ini mengembalikan objek jenis ServeMux baharu yang melaksanakan antara muka http.Handler, yang boleh kami gunakan untuk mengendalikan permintaan HTTP.

mux := http.NewServeMux()
  1. Daftar fungsi pengendali

Anda boleh menggunakan fungsi http.HandleFunc untuk mendaftarkan fungsi pengendali. Parameter pertama fungsi ini ialah laluan permintaan, dan parameter kedua ialah fungsi yang mengendalikan permintaan.

mux.HandleFunc("/", handleRequest)
  1. Mulakan pelayan HTTP

Gunakan fungsi http.ListenAndServe untuk memulakan pelayan HTTP. Parameter pertama ialah alamat pelayan dan parameter kedua ialah penghala.

http.ListenAndServe(":8080", mux)
  1. Memproses permintaan

Apabila menerima permintaan HTTP, penghala akan secara automatik memilih fungsi pemprosesan yang sepadan berdasarkan laluan permintaan, dan kemudian menghantar permintaan kepadanya. Fungsi pemprosesan perlu menerima dua parameter:

  • http.ResponseWriter: antara muka untuk menulis respons HTTP
  • *http.Request: mengandungi semua maklumat permintaan
func handleRequest(w http.ResponseWriter, r *http.Request) {
    // 处理请求
}

Dalam fungsi pengendali, kita boleh membaca data yang diminta, menjana respons, dsb.

4. Kaedah HTTP yang biasa digunakan

Kaedah permintaan HTTP merujuk kepada operasi yang dilakukan pada sumber. Kaedah HTTP yang biasa digunakan termasuk:

  • DAPAT: Dapatkan sumber
  • POS: Cipta sumber baharu
  • PUT: Kemas kini atau cipta sumber
  • PADAM: Padamkan Sumber

Di Golang, kita boleh menggunakan http.Method pemalar untuk mewakili kaedah HTTP yang berbeza.

r.Method == http.MethodGet
r.Method == http.MethodPost
r.Method == http.MethodPut
r.Method == http.MethodDelete

5. Dapatkan parameter permintaan

Semasa proses memproses permintaan HTTP, kami mungkin perlu mendapatkan parameter dalam permintaan. Ini termasuk parameter pertanyaan URL, data borang dalam permintaan POST dan banyak lagi. Di Golang, kami boleh mendapatkan parameter permintaan dengan cara berikut:

  • Parameter pertanyaan URL: Gunakan fungsi r.URL.Query() untuk mendapatkan kamus parameter pertanyaan URL.
  • Data borang dalam permintaan POST: Gunakan fungsi r.PostFormValue() untuk mendapatkan data borang dalam permintaan POST.
  • Pengepala permintaan: Gunakan r.Header untuk mendapatkan pengepala permintaan.

Berikut ialah contoh mendapatkan parameter permintaan:

func handleRequest(w http.ResponseWriter, r *http.Request) {
    // 获取URL查询参数
    queryParams := r.URL.Query()
    name := queryParams.Get("name")
    fmt.Println("Name: ", name)

    // 获取POST表单参数
    err := r.ParseForm()
    if err != nil {
        http.Error(w, "Bad Request", http.StatusBadRequest)
        return
    }
    username := r.PostFormValue("username")
    password := r.PostFormValue("password")
    fmt.Println("Username: ", username)
    fmt.Println("Password: ", password)

    // 获取请求头
    userAgent := r.Header.Get("User-Agent")
    fmt.Println("User-Agent: ", userAgent)
}

Contoh ini menunjukkan cara mendapatkan parameter pertanyaan URL, parameter borang POST dan pengepala permintaan. Kami menggunakan r.URL.Query() untuk mendapatkan kamus parameter pertanyaan URL, r.PostFormValue() untuk mendapatkan parameter borang POST dan r.Header.Get() untuk mendapatkan pengepala permintaan.

6. Memproses respons HTTP

Semasa proses memproses permintaan HTTP, kami juga perlu mengembalikan respons kepada klien. Di Golang, kita boleh menggunakan antara muka http.ResponseWriter untuk menulis respons HTTP. Antara muka ini menyediakan kaedah berikut:

  • Write:将字节数组写入响应体
  • WriteString:将字符串写入响应体
  • Header:获取响应头,可以通过它来设置响应头
  • WriteHeader:设置响应状态码

下面是一个返回HTTP响应的例子:

func handleRequest(w http.ResponseWriter, r *http.Request) {
    // 写入响应体
    w.Write([]byte("Hello world"))

    // 设置响应头
    w.Header().Set("Content-Type", "text/plain")

    // 设置响应状态码
    w.WriteHeader(http.StatusOK)
}

这个例子展示了如何返回HTTP响应。我们使用w.Write函数将字节数组写入响应体,使用w.Header.Set函数设置响应头,使用w.WriteHeader函数设置响应状态码。

七、中间件

中间件是一种常见的 Web 开发模式。在处理 HTTP 请求的过程中,我们可以使用中间件来增强 HTTP 处理功能和业务逻辑。例如,Golang 中的 gin 框架就是一个很好的中间件实现。

在 Golang 中,我们可以轻松地定义自己的中间件。中间件函数可以接收一个 http.HandlerFunc 类型的参数,并返回一个 http.HandlerFunc 类型的函数。在中间件函数中,我们可以对请求进行一些检查或者增加一些业务逻辑,例如鉴权、日志记录等等。

下面是一个简单的中间件例子:

func middleware(next http.HandlerFunc) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        // 鉴权逻辑...
        if isAuthenticate(r) {
            next(w, r)
        } else {
            http.Error(w, "Unauthorized", http.StatusUnauthorized)
        }
    }
}

在这个例子中,我们定义了一个名为 middleware 的中间件函数。它的参数是一个 http.HandlerFunc 类型的函数。在中间件函数中,我们可以进行鉴权等逻辑,然后决定是否调用 next 函数,继续处理请求。

在我们的应用中,我们可以使用上述定义的中间件函数,并将处理函数传递给它。

func hanldeRequest(w http.ResponseWriter, r *http.Request) {
    // 处理代码...
}

http.HandleFunc("/", middleware(handleRequest))

在这个例子中,我们使用 http.HandleFunc 函数来将处理函数和路由路径绑定在一起。然后,我们将它作为参数传递给 middleware 函数,再将返回的 http.HandlerFunc 类型的函数作为参数传递给 http.HandleFunc 函数。

总结

在本文中,我们介绍了如何使用 Golang 来接收 HTTP 请求。我们了解了 HTTP 请求和响应的基本概念,在实践中使用 net/http 库来处理 HTTP 请求,并详细介绍了具体的处理步骤和常用的 HTTP 方法。同时,我们还探讨了中间件的概念和实现方式。

如果你对 Golang 的 Web 开发有兴趣,这些内容对你来说应该是非常有帮助的。最后,我希望本文可以让你更好地理解 Golang 接受 HTTP 请求的知识。

Atas ialah kandungan terperinci golang menerima permintaan http. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Cara modul debug golangArtikel seterusnya:Cara modul debug golang