在URL中包含变量,返回错误页面

时间:2014-04-13 20:27:14

标签: java javascript html htmlunit

我正在尝试使用HTMLUnit访问java中的URL。我正在使用的网站的工作方式是,对于网站上的搜索结果,它首先绘制搜索结果的第一页,然后更改为所选页面。我想要做的是访问一个特定的页面,比如说,21。URL必须附加一个变量(例如http://www.thomsonlocal.com/Electricians/UK/#||25)。在我的浏览器上使用它让我在第一页加载后第25页,然后一个方法启动。(javascript或JQuery?)

我尝试对网址进行编码以转义垂直条字符,但会在网站上返回错误页面。

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

我的问题是我在这里做错了什么?有没有办法找出传递URL中的变量的方法是什么?

1 个答案:

答案 0 :(得分:1)

#之后的部分是URI片段。它不遵循与URLEncoder.encode()所做的表单数据相同的转义规则(这意味着它不适用于URL,与普遍看法相反)。

你想要的是这里的URI模板(RFC 6570)。使用this library的示例:

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());

这也会打印出正确的结果。