2011-05-31 35 views
1

我有一個蜘蛛類,在用戶請求蜘蛛網站的內容。每個搜索結果都會加載大約30個網站,搜索這些信息並將其標準化。Java:HtmlUnit效率關係PHP CURL?

我已經使用CURL在PHP中編寫了它,因爲PHP缺少多任務我想切換到Java(我知道多進程捲曲不適合我的需求)。我需要一個可以POST/GET的HTTP客戶端,接收和設置cookie以及修改HTTP頭。

我發現HtmlUnit看起來很漂亮,但也超出了我的需求,而且由於軟件包相對較大,一分鐘我會有很多的尋線請求,我不想過度使用解決方案來減慢我的服務器速度。

你認爲這會是一個問題,你有其他建議來取代Java中的CURL嗎?我應該使用Java CURL綁定嗎? 這是一個問題效率和服務器負載。

+0

我已經測試的效率: 4)的Java/6,2的HtmlUnit秒 3)的Java/Apache_HTTPClient 5,3秒 2)PHP/CURL 4,92 Secods 1)的Java/Jsoup 1,8秒 – 2011-06-04 21:39:31

回答

3

也許看看Apache Http Client

您可以爲每個線程的HttpClient和使用,做您的要求

while (running) { 

HttpClient client = new DefaultHttpClient(); 
HttpGet GET = new HttpGet("mydomain.com/path.html"); 
HttpResponse response = client.execute(GET); 
// do stuff with response 

} 

更妙的是,如果你重複使用HttpClient的請求之間,它會記住以前的響應發回的餅乾,自動將它們應用於您的下一個請求。在這個意義上,一個HttpClient模擬一個http對話。

所以,如果你沒有

client.execute(GET1); 
    // cookies received in response 
    client.execute(GET2); 
    // the second get will send the cookies back received from GET1 response. 

然後,您可以看看Java的ExecutorService的,這將使它容易把蜘蛛的工作和運行多個線程。

1

最終,您需要評估潛在解決方案,以查看最適合您需求的解決方案。

HtmlUnit提供了一個豐富的Api,用於解析網頁以及查找和評估網頁上的元素。

更簡單的解決方案是簡單地使用HttpClient(HtmlUnit在底層使用)。這隻需下載整個頁面並將其作爲OutputStream或String返回。然後,您可以使用正則表達式來查找鏈接等等,可能更像您正在使用curl進行的操作。