Mã hóa URL thường là cần thiết khi bạn gọi API từ xa với các chuỗi truy vấn bổ sung hoặc tham số đường dẫn. Bất kỳ chuỗi truy vấn hoặc tham số đường dẫn nào được đặt trong URL phải được mã hóa URL đúng cách.
Mã hóa URL cũng được yêu cầu trong khi chuẩn bị dữ liệu để gửi với loại MIME >> urllib.parse.quote('/') '/'0.
Trong bài viết này, bạn sẽ học cách mã hóa các thành phần URL trong Python. Bắt đầu nào!
Các chuỗi truy vấn mã hóa URL hoặc các tham số hình thức trong Python (3+)
Trong Python 3+, bạn có thể mã hóa URL bất kỳ chuỗi nào bằng hàm >> urllib.parse.quote('/') '/'1 được cung cấp bởi gói >> urllib.parse.quote('/') '/'2. Hàm >> urllib.parse.quote('/') '/'1 theo mặc định sử dụng sơ đồ mã hóa >> urllib.parse.quote('/') '/'4.
Hãy để xem một ví dụ -
>>> import urllib.parse >>> query = 'Hellö Wörld@Python' >>> urllib.parse.quote(query) 'Hell%C3%B6%20W%C3%B6rld%40Python'
Lưu ý rằng, chức năng >> urllib.parse.quote('/') '/'1 xem xét an toàn nhân vật >> urllib.parse.quote('/') '/'6 theo mặc định. Điều đó có nghĩa là, nó không mã hóa ký tự >> urllib.parse.quote('/') '/'6 - -
>> urllib.parse.quote('/') '/'
Hàm >> urllib.parse.quote('/') '/'1 chấp nhận một tham số được đặt tên có tên là Safe có giá trị mặc định là >> urllib.parse.quote('/') '/'6. Nếu bạn cũng muốn mã hóa ký tự >> urllib.parse.quote('/') '/'6, thì bạn có thể làm như vậy bằng cách cung cấp một chuỗi trống trong tham số an toàn như thế này-
>>> urllib.parse.quote('/', safe='') '%2F'
Mã hóa các ký tự không gian thành dấu cộng (>>> urllib.parse.quote('/', safe='') '%2F'1) bằng hàm >>> urllib.parse.quote('/', safe='') '%2F'2
Hàm >> urllib.parse.quote('/') '/'1 mã hóa các ký tự không gian thành >>> urllib.parse.quote('/', safe='') '%2F'4. Nếu bạn muốn mã hóa các ký tự không gian thành dấu cộng (>>> urllib.parse.quote('/', safe='') '%2F'1), thì bạn có thể sử dụng một chức năng khác có tên >>> urllib.parse.quote('/', safe='') '%2F'6 được cung cấp bởi gói >> urllib.parse.quote('/') '/'2.
>>> import urllib.parse >>> query = 'Hellö Wörld@Python' >>> urllib.parse.quote_plus(query) 'Hell%C3%B6+W%C3%B6rld%40Python'
Đọc: Khi nào nên mã hóa không gian thành Plus (+) hoặc %20? When to encode space to plus (+) or %20?
Mã hóa nhiều tham số cùng một lúc
Bạn có thể mã hóa nhiều tham số cùng một lúc bằng hàm >>> urllib.parse.quote('/', safe='') '%2F'8. Đây là một hàm tiện lợi có một từ điển của các cặp giá trị chính hoặc một chuỗi các bộ dữ liệu hai phần tử và sử dụng hàm >>> urllib.parse.quote('/', safe='') '%2F'2 để mã hóa mọi giá trị. Chuỗi kết quả là một loạt các cặp >>> import urllib.parse >>> query = 'Hellö Wörld@Python' >>> urllib.parse.quote_plus(query) 'Hell%C3%B6+W%C3%B6rld%40Python'0 được phân tách bằng ký tự >>> import urllib.parse >>> query = 'Hellö Wörld@Python' >>> urllib.parse.quote_plus(query) 'Hell%C3%B6+W%C3%B6rld%40Python'1.
Hãy để xem một ví dụ -
>>> import urllib.parse >>> params = {'q': 'Python URL encoding', 'as_sitesearch': 'www.urlencoder.io'} >>> urllib.parse.urlencode(params) 'q=Python+URL+encoding&as_sitesearch=www.urlencoder.io'
Lưu ý rằng, chức năng >> urllib.parse.quote('/') '/'1 xem xét an toàn nhân vật >> urllib.parse.quote('/') '/'6 theo mặc định. Điều đó có nghĩa là, nó không mã hóa ký tự >> urllib.parse.quote('/') '/'6 -
urllib.parse.urlencode(params, quote_via=urllib.parse.quote)
Hàm >> urllib.parse.quote('/') '/'1 chấp nhận một tham số được đặt tên có tên là Safe có giá trị mặc định là >> urllib.parse.quote('/') '/'6. Nếu bạn cũng muốn mã hóa ký tự >> urllib.parse.quote('/') '/'6, thì bạn có thể làm như vậy bằng cách cung cấp một chuỗi trống trong tham số an toàn như thế này-
Mã hóa các ký tự không gian thành dấu cộng (>>> urllib.parse.quote('/', safe='') '%2F'1) bằng hàm >>> urllib.parse.quote('/', safe='') '%2F'2
>>> import urllib.parse >>> params = {'name': 'Rajeev Singh', 'phone': ['+919999999999', '+628888888888']} >>> urllib.parse.urlencode(params, doseq=True) 'name=Rajeev+Singh&phone=%2B919999999999&phone=%2B628888888888'
Hàm >> urllib.parse.quote('/') '/'1 mã hóa các ký tự không gian thành >>> urllib.parse.quote('/', safe='') '%2F'4. Nếu bạn muốn mã hóa các ký tự không gian thành dấu cộng (>>> urllib.parse.quote('/', safe='') '%2F'1), thì bạn có thể sử dụng một chức năng khác có tên >>> urllib.parse.quote('/', safe='') '%2F'6 được cung cấp bởi gói >> urllib.parse.quote('/') '/'2.
Đọc: Khi nào nên mã hóa không gian thành Plus (+) hoặc %20?
Mã hóa nhiều tham số cùng một lúc
urllib.quote()
>>> import urllib >>> urllib.quote('Hello World@Python2') 'Hello%20World%40Python2'
Bạn có thể mã hóa nhiều tham số cùng một lúc bằng hàm >>> urllib.parse.quote('/', safe='') '%2F'8. Đây là một hàm tiện lợi có một từ điển của các cặp giá trị chính hoặc một chuỗi các bộ dữ liệu hai phần tử và sử dụng hàm >>> urllib.parse.quote('/', safe='') '%2F'2 để mã hóa mọi giá trị. Chuỗi kết quả là một loạt các cặp >>> import urllib.parse >>> query = 'Hellö Wörld@Python' >>> urllib.parse.quote_plus(query) 'Hell%C3%B6+W%C3%B6rld%40Python'0 được phân tách bằng ký tự >>> import urllib.parse >>> query = 'Hellö Wörld@Python' >>> urllib.parse.quote_plus(query) 'Hell%C3%B6+W%C3%B6rld%40Python'1.
>>> import urllib >>> urllib.quote_plus('Hello World@Python2') 'Hello+World%40Python2'
Nếu bạn muốn chức năng >>> import urllib.parse >>> query = 'Hellö Wörld@Python' >>> urllib.parse.quote_plus(query) 'Hell%C3%B6+W%C3%B6rld%40Python'2 sử dụng hàm >> urllib.parse.quote('/') '/'1 cho các tham số mã hóa, thì bạn có thể làm như vậy như thế này -
>>> import urllib >>> params = {'q': 'Python 2.x URL encoding', 'as_sitesearch': 'www.urlencoder.io'} >>> urllib.urlencode(params) 'q=Python+2.x+URL+encoding&as_sitesearch=www.urlencoder.io'
Mã hóa nhiều tham số cùng một lúc trong đó một tham số có thể có nhiều giá trị
Hàm >>> import urllib.parse >>> query = 'Hellö Wörld@Python' >>> urllib.parse.quote_plus(query) 'Hell%C3%B6+W%C3%B6rld%40Python'2 có một đối số tùy chọn gọi là >>> import urllib.parse >>> query = 'Hellö Wörld@Python' >>> urllib.parse.quote_plus(query) 'Hell%C3%B6+W%C3%B6rld%40Python'5. Nếu đầu vào của bạn có thể có nhiều giá trị cho một khóa duy nhất, thì bạn nên đặt đối số >>> import urllib.parse >>> query = 'Hellö Wörld@Python' >>> urllib.parse.quote_plus(query) 'Hell%C3%B6+W%C3%B6rld%40Python'5 thành >>> import urllib.parse >>> query = 'Hellö Wörld@Python' >>> urllib.parse.quote_plus(query) 'Hell%C3%B6+W%C3%B6rld%40Python'7 để tất cả các giá trị được mã hóa đúng -
- Mã hóa URL trong Python 2.x
- Trong Python 2.x Các chức năng >> urllib.parse.quote('/') '/'1, >>> urllib.parse.quote('/', safe='') '%2F'2 và >>> import urllib.parse >>> query = 'Hellö Wörld@Python' >>> urllib.parse.quote_plus(query) 'Hell%C3%B6+W%C3%B6rld%40Python'2 có thể được truy cập trực tiếp từ gói >>> import urllib.parse >>> params = {'q': 'Python URL encoding', 'as_sitesearch': 'www.urlencoder.io'} >>> urllib.parse.urlencode(params) 'q=Python+URL+encoding&as_sitesearch=www.urlencoder.io'1. Các chức năng này đã được tái cấu trúc thành gói >> urllib.parse.quote('/') '/'2 trong Python 3.
- Các ví dụ sau đây cho thấy cách bạn có thể thực hiện mã hóa URL trong Python 2.x bằng cách sử dụng các chức năng trên.