2011-05-31 100 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进行的操作。