Sau khi chúng tôi phân tích cú pháp URL và nhận chuỗi truy vấn, chúng tôi có thể chuyển chuỗi sang phương thức parse_qs
để lấy từ điển chứa các tham số truy vấn của URL
Phương thức parse_qs
phân tích cú pháp chuỗi truy vấn đã cho và trả về kết quả dưới dạng từ điển
Khóa từ điển là tên của tham số truy vấn và giá trị là danh sách lưu trữ giá trị cho từng tham số
Trước tiên, bạn phải truy cập một khóa trong từ điển, sau đó phải truy cập mục danh sách ở chỉ mục cụ thể [rất có thể là parse_qs
1 trừ khi bạn có một tham số truy vấn có nhiều giá trị]
Nếu URL của bạn có tham số truy vấn không có giá trị mà bạn muốn giữ lại trong kết quả, hãy đặt đối số parse_qs
2 thành parse_qs
3 khi gọi parse_qs
Mặc dù tham số truy vấn parse_qs
5 không có giá trị được chỉ định, nó vẫn được đưa vào từ điển nếu parse_qs
2 được đặt thành parse_qs
3
Tham số yêu cầu được sử dụng để gửi thông tin bổ sung đến máy chủ. Một URL chứa các tham số này. Có hai loại tham số
Tham số truy vấn. Chúng được thêm vào cuối URL yêu cầu, Tham số truy vấn được thêm vào cuối URL yêu cầu, theo sau '?'
Tham số đường dẫn. Đây là một phần của URL yêu cầu, được truy cập bằng cách sử dụng trình giữ chỗ trước '. ' Thí dụ
Có hai cách để đặt tham số truy vấn theo yêu cầu trong Postman
Sử dụng trường URL
Cách phổ biến nhất để thêm tham số là nối chuỗi truy vấn vào cuối URL
Hãy nhập một URL vào trường văn bản URL
Giả sử chúng ta có URL www. Google. com/search khi bạn nhấp vào tùy chọn gửi, bạn sẽ nhận được phản hồi sau
Bây giờ hãy thử nhập tham số theo định dạng sau
Google. com/search?q=javatpoint
Ở đây 'q' là khóa và 'javatpoint' là giá trị của khóa
Khi bạn nhập tham số vào URL và chọn nút gửi thì bạn sẽ nhận được phản hồi sau
Sử dụng tham số
Sử dụng Params là cách thứ hai. Tùy chọn này có sẵn ở phía bên trái của trường văn bản URL. Tùy chọn này sẽ cung cấp cho bạn các trường văn bản bổ sung trong trường URL để nhập các tham số truy vấn ở dạng cặp khóa-giá trị
Sau khi bạn nhập tham số vào trường văn bản Thông số, thì các tham số này sẽ tự động được thêm vào URL. Giao diện cung cấp để giữ các tham số đã nhập của bạn một cách có tổ chức, rất hữu ích cho các yêu cầu yêu cầu một số tham số
Hãy xem một ví dụ
Nhập địa chỉ www. Google. com/search trong trường văn bản URL
Và bây giờ hãy đến phần Thông số
Viết các tham số theo cặp khóa-giá trị, như được hiển thị. Ở đây, k là truy vấn và javatpoint là cụm từ tìm kiếm
Bây giờ hãy nhấn nút gửi và xem phần xem trước của cửa sổ phản hồi;
Nhiều thông số
Chúng tôi cũng có thể làm việc với nhiều tham số trong một truy vấn. Chỉ cần truy cập trình duyệt của bạn và tìm kiếm trong Google 'javatpoint'
https. //www. Google. com/search?q=javatpoint&rlz=1C1CHBF_enUS851US851&oq=javatpoint&aqs=chrome. 69i57j0l5j69i60l2. 3135j0j7&sourceid=chrome&ie=UTF-8
Xem hình ảnh và URL ở trên;
Trong URL trên, '&' phải được theo sau bởi một tham số chẳng hạn như &ie=UTF-8. Trong tham số này, tôi. e. , là khóa và UTF-8 là khóa-giá trị
Nhập cùng một URL vào trường văn bản Người đưa thư; . Thậm chí bạn có thể viết từng tham số và gửi yêu cầu có nhiều tham số
Phương thức Getsizeof[] từ thư viện sys của Python sẽ cho bạn biết kích thước của một đối tượng Python trong bộ nhớ
import sys x="Australia" y=sys.getsizeof[x] print[y]
đầu ra
58
Kết quả tính bằng byte
Getsizeof[] sẽ cung cấp kích thước của bất kỳ đối tượng Python nào. Đối tượng phạm vi, đối tượng byte, đối tượng đảo ngược, đối tượng danh sách, đối tượng từ điển, danh sách tiếp tục
Khi xây dựng máy chủ và máy khách HTTP, chúng tôi có thể cần chuyển nhiều chuỗi dưới dạng tham số cho URL HTTP. Trong hướng dẫn này, chúng tôi sẽ giới thiệu một số phương pháp để phân tích nhiều tham số thành một yêu cầu chuỗi trong Golang
Xây dựng một máy chủ HTTP đơn giản [Thiết lập phòng thí nghiệm]
Nếu bạn không biết cách xây dựng một máy chủ và máy khách HTTP đơn giản, vui lòng xem chương trước của chúng tôi để hiểu cách chúng tôi có thể làm điều đó trong Golang. Đối với mục đích demo, chúng ta hãy tạo một máy chủ HTTP cơ bản sẽ lắng nghe trên một số cổng được xác định trước. Tất cả các yêu cầu đến máy chủ sẽ được xử lý bởi HelloFun[]
trả về một tin nhắn cho khách hàng
package main
import [
"fmt"
"log"
"net/http"
]
func main[] {
http.HandleFunc["/", Hellofunc]
err := http.ListenAndServe[":8080", nil]
if err != nil {
log.Fatalf["Error creating server %s\n", err.Error[]]
}
}
func Hellofunc[w http.ResponseWriter, r *http.Request] {
fmt.Fprintf[w, "Welcome to GoLinuxcloud server!"]
}
Chúng ta có thể sử dụng nhập http. //máy chủ cục bộ. 8080/ vào bất kỳ trình duyệt web nào để kiểm tra xem máy chủ của chúng tôi có hoạt động hay không
Phương pháp 1. Sử dụng fmt. hàm Sprintf[]
func Sprintf[format string, a ...any] string
. Sprintf định dạng theo định dạng định dạng và trả về chuỗi kết quả
CŨNG ĐỌC. Đã giải quyết. Làm cách nào để kiểm tra xem chuỗi có trống trong GoLang không?
Nếu bạn muốn tạo chuỗi yêu cầu không yêu cầu mã hóa, bạn chỉ cần sử dụng hàm
func Hellofunc[w http.ResponseWriter, r *http.Request] {
returnStr := ""
// iterate over all the query parameters
values := r.URL.Query[]
for k, v := range values {
returnStr = returnStr + k + " => " + strings.Join[v, " "] + "\n"
}
// return to client
fmt.Fprintf[w, returnStr]
}
0. Trong ví dụ dưới đây, chúng ta sẽ xem cách chúng ta có thể phân tích cú pháp nhiều chuỗi dưới dạng tham số cho một yêu cầu URL từ máy khách. Chúng tôi sẽ sửa đổi máy chủ một chút để trích xuất các tham số từ yêu cầu URL và trả lại cho máy kháchmáy chủ
func Hellofunc[w http.ResponseWriter, r *http.Request] {
returnStr := ""
// iterate over all the query parameters
values := r.URL.Query[]
for k, v := range values {
returnStr = returnStr + k + " => " + strings.Join[v, " "] + "\n"
}
// return to client
fmt.Fprintf[w, returnStr]
}
Khách hàng
package main
import [
"fmt"
"io/ioutil"
"net/http"
]
func main[] {
//parse multiple strings as parameters
url := fmt.Sprintf["//localhost:8080/?name=%s&id=%s&author=%s", "golinuxcloud", "1", "TuanNguyen"]
method := "GET"
client := &http.Client{}
req, err := http.NewRequest[method, url, nil]
if err != nil {
fmt.Println[err]
return
}
res, err := client.Do[req]
if err != nil {
fmt.Println[err]
return
}
defer res.Body.Close[]
body, err := ioutil.ReadAll[res.Body]
if err != nil {
fmt.Println[err]
return
}
fmt.Println[string[body]]
}
đầu ra
Quảng cáo
name => golinuxcloud
id => 1
author => TuanNguyen
Phương pháp 2. Sử dụng gói net/url
url gói phân tích cú pháp URL và thực hiện thoát truy vấn. Để xây dựng các URL cần mã hóa, chúng ta có thể sử dụng gói
func Hellofunc[w http.ResponseWriter, r *http.Request] {
returnStr := ""
// iterate over all the query parameters
values := r.URL.Query[]
for k, v := range values {
returnStr = returnStr + k + " => " + strings.Join[v, " "] + "\n"
}
// return to client
fmt.Fprintf[w, returnStr]
}
1
Gói net/url với hàm Query[]
func Hellofunc[w http.ResponseWriter, r *http.Request] {
returnStr := ""
// iterate over all the query parameters
values := r.URL.Query[]
for k, v := range values {
returnStr = returnStr + k + " => " + strings.Join[v, " "] + "\n"
}
// return to client
fmt.Fprintf[w, returnStr]
}
2. Truy vấn phân tích cú pháp RawQuery và trả về các giá trị tương ứng. Nó âm thầm loại bỏ các cặp giá trị không đúng định dạng. Để kiểm tra lỗi, hãy sử dụng ParseQueryCŨNG ĐỌC. Cách sử dụng Golang JSON Omitempty [GIẢI QUYẾT]
Ví dụ bên dưới minh họa cách chúng ta có thể sử dụng hàm
func Hellofunc[w http.ResponseWriter, r *http.Request] {
returnStr := ""
// iterate over all the query parameters
values := r.URL.Query[]
for k, v := range values {
returnStr = returnStr + k + " => " + strings.Join[v, " "] + "\n"
}
// return to client
fmt.Fprintf[w, returnStr]
}
3 để phân tích cú pháp nhiều chuỗi thành một yêu cầu nhận HTTPpackage main
import [
"fmt"
"io/ioutil"
"net/http"
"net/url"
]
func main[] {
url := &url.URL{Scheme: "http", Host: "localhost:8080"}
// parse multiple strings to get url
q := url.Query[]
q.Add["author", "TuanNguyen"]
q.Add["name", "Go Linux Cloud"]
url.RawQuery = q.Encode[]
client := &http.Client{}
res, err := client.Get[url.String[]]
if err != nil {
fmt.Println[err]
return
}
defer res.Body.Close[]
body, err := ioutil.ReadAll[res.Body]
if err != nil {
fmt.Println[err]
return
}
fmt.Println[string[body]]
}
đầu ra
name => Go Linux Cloud
author => TuanNguyen
Gói net/url có url. giá trị. Mã hóa[] chức năng
Trong cùng một kịch bản, như vừa khám phá ở trên, chúng ta có thể sử dụng một phương pháp mạnh mẽ hơn để thoát khỏi nhiều trường cùng một lúc. Sử dụng struct và phương thức. Đây là định nghĩa của nó
func Hellofunc[w http.ResponseWriter, r *http.Request] {
returnStr := ""
// iterate over all the query parameters
values := r.URL.Query[]
for k, v := range values {
returnStr = returnStr + k + " => " + strings.Join[v, " "] + "\n"
}
// return to client
fmt.Fprintf[w, returnStr]
}
4. Các giá trị ánh xạ một khóa chuỗi tới một danh sách các giá trị. Nó thường được sử dụng cho các tham số truy vấn và giá trị biểu mẫu. Không giống như trong bản đồ func Hellofunc[w http.ResponseWriter, r *http.Request] {
returnStr := ""
// iterate over all the query parameters
values := r.URL.Query[]
for k, v := range values {
returnStr = returnStr + k + " => " + strings.Join[v, " "] + "\n"
}
// return to client
fmt.Fprintf[w, returnStr]
}
5, các khóa trong bản đồ Giá trị phân biệt chữ hoa chữ thườngHãy xem một ví dụ với nhiều khóa được mã hóa URL
package main
import [
"fmt"
"io/ioutil"
"net/http"
"net/url"
]
func main[] {
urlRe := &url.URL{Scheme: "http", Host: "localhost:8080"}
// set the Values
v := url.Values{}
v.Set["author", "TuanNguyen"]
v.Add["name", "Go Linux Cloud"]
v.Add["drink", "C@ffee"]
//encode the params
urlRe.RawQuery = v.Encode[]
client := &http.Client{}
res, err := client.Get[urlRe.String[]]
if err != nil {
fmt.Println[err]
return
}
defer res.Body.Close[]
body, err := ioutil.ReadAll[res.Body]
if err != nil {
fmt.Println[err]
return
}
fmt.Println[string[body]]
}
đầu ra
Quảng cáo
author => TuanNguyen
drink => C@ffee
name => Go Linux Cloud
Tóm lược
Tôi hy vọng bạn thích bài viết này và đã học cách phân tích cú pháp nhiều chuỗi thành chuỗi yêu cầu nhận HTTP. Nếu yêu cầu của bạn không yêu cầu mã hóa, chỉ cần sử dụng hàm
func Hellofunc[w http.ResponseWriter, r *http.Request] {
returnStr := ""
// iterate over all the query parameters
values := r.URL.Query[]
for k, v := range values {
returnStr = returnStr + k + " => " + strings.Join[v, " "] + "\n"
}
// return to client
fmt.Fprintf[w, returnStr]
}
0. Đối với các tình huống phức tạp hơn cần mã hóa, hãy cân nhắc sử dụng gói func Hellofunc[w http.ResponseWriter, r *http.Request] {
returnStr := ""
// iterate over all the query parameters
values := r.URL.Query[]
for k, v := range values {
returnStr = returnStr + k + " => " + strings.Join[v, " "] + "\n"
}
// return to client
fmt.Fprintf[w, returnStr]
}
1 với nhiều chức năng để giúp bạn phân tích cú pháp một số chuỗi dưới dạng tham số. hàm func Hellofunc[w http.ResponseWriter, r *http.Request] {
returnStr := ""
// iterate over all the query parameters
values := r.URL.Query[]
for k, v := range values {
returnStr = returnStr + k + " => " + strings.Join[v, " "] + "\n"
}
// return to client
fmt.Fprintf[w, returnStr]
}
8 hoặc func Hellofunc[w http.ResponseWriter, r *http.Request] {
returnStr := ""
// iterate over all the query parameters
values := r.URL.Query[]
for k, v := range values {
returnStr = returnStr + k + " => " + strings.Join[v, " "] + "\n"
}
// return to client
fmt.Fprintf[w, returnStr]
}
9