Có ai biết thư viện Scala hoặc Java tốt có thể khắc phục các sự cố thường gặp trong URI không đúng định dạng, chẳng hạn như chứa các ký tự cần được thoát hay không?Thư viện Scala hoặc Java để sửa các URI không đúng định dạng
Trả lời
Tôi đã thử nghiệm một vài thư viện, bao gồm di sản hiện tại URIUtil của HTTPClient mà không cảm thấy tôi đã tìm thấy bất kỳ giải pháp khả thi nào. Thông thường, tôi đã có đủ thành công với loại cấu trúc java.net.URI này mặc dù:
/**
* Tries to construct an url by breaking it up into its smallest elements
* and encode each component individually using the full URI constructor:
*
* foo://example.com:8042/over/there?name=ferret#nose
* \_/ \______________/\_________/ \_________/ \__/
* | | | | |
* scheme authority path query fragment
*/
public URI parseUrl(String s) throws Exception {
URL u = new URL(s);
return new URI(
u.getProtocol(),
u.getAuthority(),
u.getPath(),
u.getQuery(),
u.getRef());
}
có thể được sử dụng kết hợp với quy trình sau đây. Nó liên tục giải mã một số URL
cho đến khi chuỗi được giải mã không thay đổi, có thể hữu ích đối với ví dụ: mã hóa kép. Lưu ý, để đơn giản, mẫu này không có bất kỳ hình thức nào không an toàn, v.v.
public String urlDecode(String url, String encoding) throws UnsupportedEncodingException, IllegalArgumentException {
String result = URLDecoder.decode(url, encoding);
return result.equals(url) ? result : urlDecode(result, encoding);
}
Tôi khuyên bạn không nên sử dụng java.net.URLEncoder
để mã hóa phần trăm URI. Mặc dù cái tên, nó không phải là rất tốt cho mã hóa URL như nó không làm theo các tiêu chuẩn rfc3986 và thay vào đó mã hóa sang định dạng application/x-www-form-urlencoded
MIME (read more here)
Đối với mã hóa URI trong Scala Tôi muốn giới thiệu lớp Uri từ phun http. scala-uri là một thay thế (tuyên bố từ chối trách nhiệm: Tôi là tác giả).