क्या किसी को भी एक अच्छी स्कैला या जावा लाइब्रेरी पता है जो विकृत यूआरआई में सामान्य समस्याओं को ठीक कर सकता है, जैसे कि बचने वाले पात्रों को शामिल करना चाहिए लेकिन नहीं?विकृत यूआरआई को ठीक करने के लिए स्कैला या जावा लाइब्रेरी
उत्तर
मैंने कुछ पुस्तकालयों का परीक्षण किया है, जिसमें HTTP क्लाइंट के अब विरासत URIUtil शामिल हैं, मुझे लगता है कि मुझे कोई व्यवहार्य समाधान नहीं मिला है।
/**
* 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());
}
जो निम्नलिखित दिनचर्या के साथ संयोजन में इस्तेमाल किया जा सकता है: आमतौर पर, मैं java.net.URI निर्माण के इस प्रकार यद्यपि के साथ पर्याप्त सफलता मिली है। यह बार-बार URL
को डीकोड करता है जब तक कि डीकोडेड स्ट्रिंग नहीं बदली जाती, जो कि डबल एन्कोडिंग के विरुद्ध उपयोगी हो सकती है। ध्यान दें, यह सरल रखने के लिए, इस नमूने की सुविधा नहीं है किसी भी फेल सेफ आदि
public String urlDecode(String url, String encoding) throws UnsupportedEncodingException, IllegalArgumentException {
String result = URLDecoder.decode(url, encoding);
return result.equals(url) ? result : urlDecode(result, encoding);
}
मैं प्रतिशत एन्कोडिंग URI के लिए java.net.URLEncoder
उपयोग करने के खिलाफ सलाह देंगे। नाम के बावजूद, यह यूआरएल यह rfc3986 मानक का पालन नहीं करता के रूप में एन्कोड करने के लिए महान नहीं है और इसके बजाय application/x-www-form-urlencoded
MIME प्रारूप (read more here)
स्काला में यूआरआई मैं स्प्रे http से Uri वर्ग की सिफारिश करेंगे एन्कोडिंग के लिए करने के लिए encodes। scala-uri एक विकल्प है (अस्वीकरण: मैं लेखक हूं)।