我正在尝试使用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中的变量的方法是什么?
答案 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());
这也会打印出正确的结果。