У меня есть URL-адрес, и я хотел бы проанализировать и извлечь из него параметры.Моя реализация основана на следующем стеке потока post
Однако мой URL более сложный, чем тот, который использовался в посте выше.Это выглядит следующим образом:
https://example.com/cdscontent/login?initialURI=https%3A%2F%2Fexample.com%2Fdashboard%2F%3Fportal%3Dmyportal%26LO%3D4%26contentid%3D10007.786471%26viewmode%3Dcontent%26variant%3D%2Fmyportal%2F
Как вы можете видеть, он имеет параметр initialURI
, который является (закодированным) URL-адресом, и порядок параметров в нем не может быть изменен.
Когда я запускаю org.apache.http.client.utils.URLEncodedUtils#parse
, он возвращает
[initialURI=https://example.com/dashboard/?portal=myportal, LO=4, contentid=10007.786471, viewmode=content, variant=/myportal/]
, как вы можете видеть, он анализирует каждый параметр, кроме portal
.Он все еще связан с https://example.com/dashboard/
Другими словами, я ожидаю этого:
[initialURI=https://example.com/dashboard/, portal=myportal, LO=4, contentid=10007.786471, viewmode=content, variant=/myportal/]
Я что-то здесь не так делаю или вы думаете, что URLEncodedUtils # parse не может обработать этот случай?
У вас есть альтернатива, чтобы предложить?
Большое спасибо!
Модульный тест, чтобы попробовать
public class UrlParserTest {
@Test
public void testParseUrl() throws UnsupportedEncodingException, URISyntaxException {
String url =
"https://www.example.com/cdscontent/login?initialURI=https%3A%2F%2Fwww.example.com%2Fdashboard%2F%3Fportal%3Dmyportal%26LO%3D4%26contentid%3D10007.786471%26viewmode%3Dcontent%26variant%3D%2Fmyportal%2F";
String decoded = URLDecoder.decode(url, "UTF-8");
List<NameValuePair> params = URLEncodedUtils.parse(new URI(decoded), "UTF-8");
System.out.println(params);
}
}