Cách chuyển nhiều tham số truy vấn trong URL bằng Python

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_qs1 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_qs2 thành parse_qs3 khi gọi parse_qs

Mặc dù tham số truy vấn parse_qs5 không có giá trị được chỉ định, nó vẫn được đưa vào từ điển nếu parse_qs2 được đặt thành parse_qs3

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ách

má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 ParseQuery

CŨ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 HTTP

package 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ường

Hã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

Làm cách nào để chuyển nhiều tham số truy vấn trong URL còn lại?

Tham số truy vấn được chuyển sau chuỗi URL bằng cách thêm một dấu hỏi theo sau tên tham số , sau đó là dấu [ [“=”] và sau đó là giá trị tham số. Nhiều tham số được phân tách bằng ký hiệu “&” .

Làm cách nào để chuyển nhiều tham số trong yêu cầu HTTP?

Bạn có nhiều tùy chọn để truyền nhiều tham số cho phương thức GET. Liên kết FromRouteAttribute, FromQuery và Mô hình. .
trường biểu mẫu
cơ thể yêu cầu
Tham số dữ liệu tuyến đường
Tham số chuỗi truy vấn
Tệp đã tải lên

Chủ Đề