Включая переменные в URL, возвращает страницу с ошибкой

0

Я пытаюсь получить доступ к URL-адресу в java, используя HTMLUnit. Способ работы веб-сайта заключается в том, что для результатов поиска на веб-сайте он сначала извлекает первую страницу результатов поиска, а затем переходит на выбранную страницу. То, что я хочу сделать, - это доступ к определенной странице, например, 21. URL должен иметь переменную, присоединенную к ней (например, http://www.thomsonlocal.com/Electricians/UK/#||25). Используя его в моем браузере, я получаю 25-ю страницу после загрузки первой страницы, а затем запускает метод (javascript или JQuery?)

Я попытался кодировать URL-адрес, чтобы избежать символа вертикальной строки, но возвращает страницу с ошибкой на сайте.

page = webClient.getPage("http://www.thomsonlocal.com/Electricians/UK/"+URLEncoder.encode("#||" , "UTF-8")+ 21);

Мой вопрос в том, что я делаю неправильно здесь? И есть ли способ узнать, какой метод используется для передачи переменных в URL?

Теги:
htmlunit

1 ответ

1
Лучший ответ

Часть после # является фрагментом URI. Он не подчиняется тем же правилам экранирования, что и данные формы, что и делает URLEncoder.encode() (что означает, что он не работает для URL-адресов, вопреки распространенному мнению).

Здесь вы хотите создать шаблон URI (RFC 6570). Пример с использованием этой библиотеки:

public static void main(final String... args)
    throws URITemplateException, MalformedURLException
{
    final URITemplate template 
        = new URITemplate("http://www.thomsonlocal.com/Electricians/UK/#{+var}");

    final VariableMap map = VariableMap.newBuilder()
        .addScalarValue("var", "||25")
        .freeze();

    System.out.println(template.toURL(map));
}

Это будет (правильно) напечатать:

http://www.thomsonlocal.com/Electricians/UK/#%7C%7C25

Другим решением, хотя и не столь гибким, является использование конструктора URI:

final URI uri = new URI("http", "www.thomsonlocal.com",
    "/Electricians/UK/", "||25");

System.out.println(uri.toURL());

Это также напечатает правильный результат.

  • 0
    Это работает, спасибо большое

Ещё вопросы

Сообщество Overcoder
Наверх
Меню