Trình phân tích URL

Khi một webhook gặp lỗi hoặc một liên kết theo dõi mang theo các tham số sai, cách nhanh nhất là tách URL ra và đọc từng phần. Dán bất kỳ URL nào và trình phân tích này sẽ chia nó thành các thành phần: scheme, tên người dùng và mật khẩu, host, port, path, chuỗi truy vấn và fragment, rồi trải chuỗi truy vấn ra thành một bảng gồm từng cặp khóa và giá trị. Công cụ chạy trên máy chủ của chúng tôi bằng trình phân tích URL tiêu chuẩn của PHP, nên bạn thấy chính xác cách một backend PHP đọc cùng liên kết đó.

Cách phân tích một URL

  1. 1

    Dán URL

    Nhập bất kỳ URL nào, tuyệt đối hoặc tương đối. Không cần bấm gì cả: nó được phân tích ngay khi bạn gõ.

  2. 2

    Đọc các thành phần

    Bảng được điền bằng scheme, host, port, người dùng, mật khẩu, path, query và fragment tìm được. Những phần trống hiển thị một dấu gạch.

  3. 3

    Trải rộng chuỗi truy vấn

    Mỗi cặp `key=value` xuất hiện trên một hàng riêng, với phần trăm mã hóa và `+` được giải mã thành ký tự thật.

  4. 4

    Sao chép các tham số

    Nút sao chép lấy toàn bộ tham số truy vấn cùng lúc dưới dạng các dòng `key=value`, sẵn sàng dán vào một API client.

Giải phẫu của một URL

Lấy URL này: https://user:pass@api.example.com:8443/v1/users?page=2&sort=name#profile. Trình phân tích chia nó thành:

Thành phần Giá trị
scheme https
user user
pass pass
host api.example.com
port 8443
path /v1/users
query page=2&sort=name
fragment profile

Sau đó, chuỗi truy vấn được trải ra thành một bảng riêng: page = 2 và sort = name.

Cách đọc chuỗi truy vấn

  • Các giá trị được giải mã khỏi phần trăm mã hóa và + trở thành dấu cách, nên q=hello%20world và q=hello+world đều được đọc là hello world.
  • Một cặp được tách tại dấu = đầu tiên, nên token=a=b=c giữ nguyên a=b=c làm giá trị.
  • Các khóa lặp lại chỉ giữ giá trị cuối cùng: ?id=1&id=2 trả về id = 2. Để giữ mọi giá trị, hãy dùng cú pháp mảng id[]=1&id[]=2, giá trị này sẽ hiển thị dưới dạng danh sách.
  • Các khóa trong dấu ngoặc vuông như filter[status]=open trở thành một cấu trúc lồng nhau, hiển thị dưới dạng JSON.

Port, path và fragment

  • Port được hiển thị đúng như cách nó được viết. Không có gì được thêm vào hay bỏ đi, nên :443 hiển thị là 443 và một URL không có port sẽ để trống hàng đó.
  • Một dấu gạch chéo ở cuối làm thay đổi path: https://a.com có path rỗng, còn https://a.com/ có path là /.
  • Fragment (sau dấu #) là giá trị chỉ trình duyệt dùng để cuộn tới một điểm neo hoặc điều khiển router phía máy khách. Nó không bao giờ đến máy chủ, nên bất kỳ thứ gì backend cần đọc đều phải nằm trong chuỗi truy vấn.
  • Host được trả về đúng như cách bạn nhập; trình phân tích này không chuyển đổi các tên miền quốc tế hóa (không phải ASCII) sang hay từ Punycode.

Câu hỏi thường gặp

Có. Một liên kết tương đối như /v1/users?ref=nav không có scheme hay host, nên những hàng đó để trống trong khi path và query vẫn được điền. Chỉ một URL sai định dạng, ví dụ có port không phải số như http://a.com:port, mới bị từ chối hoàn toàn.

Chỉ giá trị cuối cùng được giữ lại, nên ?id=1&id=2 trả về id = 2, đúng như cách một backend PHP đọc. Nếu bạn cần mọi giá trị, hãy dùng cú pháp mảng id[]=1&id[]=2 và chúng sẽ hiển thị dưới dạng danh sách.

Trình phân tích báo cáo port đúng như cách nó được viết. Nó không bao giờ bỏ port mặc định hay thêm port còn thiếu, nên một URL không có port sẽ hiển thị hàng trống và https://a.com:443 hiển thị 443.

URL được gửi tới máy chủ của chúng tôi để phân tích, vì công cụ này chạy trên máy chủ chứ không chỉ trong trình duyệt của bạn. Chúng tôi không lưu chính các URL đó; chúng tôi chỉ ghi lại một số đếm ẩn danh rằng trình phân tích đã được dùng.

Công cụ liên quan

Công cụ này có phiên bản bằng các ngôn ngữ khác