2014-04-13 38 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