2014-04-13 35 views
0

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

我试图编码的URL来转义垂直栏字符,但返回网站上的错误页面。

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

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

回答

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

这也将打印正确的结果。

+0

This Works,thanks a bunch – GreenGodot