听起来你好像在尝试创建一个网页抓取应用程序,为此,我推荐使用HtmlUnit库。 它使表单、代理和嵌入在网页中的数据更容易处理,我认为它使用Apache的HttpClient来处理HTTP请求,但这可能太低级了,你不必担心。 使用此库,您可以像在Web浏览器中控制网页一样在Java中控制网页:单击按钮、键入文本、选择值。 以下是HtmlUnit's getting started page中的一些示例: 提交表单:
@Test
public void submittingForm() throws Exception {
final WebClient webClient = new WebClient();
// Get the first page
final HtmlPage page1 = webClient.getPage("http://some_url");
// Get the form that we are dealing with and within that form,
// find the submit button and the field that we want to change.
final HtmlForm form = page1.getFormByName("myform");
final HtmlSubmitInput button = form.getInputByName("submitbutton");
final HtmlTextInput textField = form.getInputByName("userid");
// Change the value of the text field
textField.setValueAttribute("root");
// Now submit the form by clicking the button and get back the second page.
final HtmlPage page2 = button.click();
webClient.closeAllWindows();
}
使用代理服务器:
@Test
public void homePage_proxy() throws Exception {
final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_2, "http://myproxyserver", myProxyPort);
//set proxy username and password
final DefaultCredentialsProvider credentialsProvider = (DefaultCredentialsProvider) webClient.getCredentialsProvider();
credentialsProvider.addProxyCredentials("username", "password");
final HtmlPage page = webClient.getPage("http://htmlunit.sourceforge.net");
assertEquals("HtmlUnit - Welcome to HtmlUnit", page.getTitleText());
webClient.closeAllWindows();
}
7条答案
按热度按时间h6my8fg21#
听起来你好像在尝试创建一个网页抓取应用程序,为此,我推荐使用HtmlUnit库。
它使表单、代理和嵌入在网页中的数据更容易处理,我认为它使用Apache的HttpClient来处理HTTP请求,但这可能太低级了,你不必担心。
使用此库,您可以像在Web浏览器中控制网页一样在Java中控制网页:单击按钮、键入文本、选择值。
以下是HtmlUnit's getting started page中的一些示例:
提交表单:
使用代理服务器:
WebClient
类是单线程的,因此处理网页的每个线程都需要自己的WebClient
示例。除非您需要处理Javascript或CSS,否则您也可以在创建客户端时禁用它们:
kuuvgm7e2#
HTTPUnit是用于测试目的的,我不认为它最适合嵌入到你的应用程序中。
当您要使用HTTP资源时(比如网页)我推荐Apache HTTPClient。但是你可能会发现这个框架对于你的网页抓取用例来说太低级了。所以我推荐一个像Apache Camel这样的集成框架来实现这个目的。例如下面的路径读取一个网页(使用Apache HTTPClient),将HTML转换为格式良好的HTML(使用TagSoup),并将结果转换为XML表示形式以供进一步处理。
您可以使用XPath进一步处理生成的XML,或者使用JAXB将其转换为POJO。
dxpyg8gm3#
HTTPUnit是用于单元测试的,除非你指的是“测试客户端”,否则我认为它不适合创建应用程序。
我想用Java开发HTTP客户端
当然,你也意识到ApacheHTTP客户端不是你的答案,听起来你想创建第一个Web应用程序。
你将需要servlet和JSP。使用Apache的Tomcat并学习足够的JSP和JSTL来做你需要做的事情。不要为框架而烦恼,因为这是你的第一次。
当你运行它的时候,试试像Spring这样的框架。
5w9g7ksd4#
它似乎是一个cURL支持java:
http://curl.haxx.se/libcurl/java/
dauxcl2d5#
这取决于你的网站有多复杂。选项有Apache HttpClient(加上像JTidy这样的东西)或者像HtmlUnit或Canoo WebTest这样的面向测试的包。HtmlUnit非常强大--比如,你可以处理JavaScript。
kmbjn2e36#
Jetty有一个很好的客户端库。我喜欢使用它,因为我经常需要在创建客户端的沿着创建一个服务器。Apache HTTP客户端真的很好,似乎有一些更多的功能,比如能够使用SSL解析代理。
vc6uscn97#
如果你真的想模拟一个浏览器,那么试试SeleniumRC