Java的最佳HTTP库?

rjee0c15  于 2023-02-07  发布在  Java
关注(0)|答案(7)|浏览(232)

我想在Java开发http客户端的大学项目登录到网站,从HTML数据中获取数据,完成和发送表单。我不知道使用哪个http库:Apache HTTP客户端-不创建DOM模型,但与http重定向,多线程工作。HTTPUnit-创建DOM模型,很容易与表单,字段,表等工作,但我不知道将如何与多线程和代理设置工作。
有什么建议吗?

h6my8fg2

h6my8fg21#

听起来你好像在尝试创建一个网页抓取应用程序,为此,我推荐使用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();
}

WebClient类是单线程的,因此处理网页的每个线程都需要自己的WebClient示例。
除非您需要处理Javascript或CSS,否则您也可以在创建客户端时禁用它们:

WebClient client = new WebClient();
client.setJavaScriptEnabled(false);
client.setCssEnabled(false);
kuuvgm7e

kuuvgm7e2#

HTTPUnit是用于测试目的的,我不认为它最适合嵌入到你的应用程序中。
当您要使用HTTP资源时(比如网页)我推荐Apache HTTPClient。但是你可能会发现这个框架对于你的网页抓取用例来说太低级了。所以我推荐一个像Apache Camel这样的集成框架来实现这个目的。例如下面的路径读取一个网页(使用Apache HTTPClient),将HTML转换为格式良好的HTML(使用TagSoup),并将结果转换为XML表示形式以供进一步处理。

from("http://mycollege.edu/somepage.html).unmarshall().tidyMarkup().to("xslt:mystylesheet.xsl")

您可以使用XPath进一步处理生成的XML,或者使用JAXB将其转换为POJO。

dxpyg8gm

dxpyg8gm3#

HTTPUnit是用于单元测试的,除非你指的是“测试客户端”,否则我认为它不适合创建应用程序。
我想用Java开发HTTP客户端
当然,你也意识到ApacheHTTP客户端不是你的答案,听起来你想创建第一个Web应用程序。
你将需要servlet和JSP。使用Apache的Tomcat并学习足够的JSP和JSTL来做你需要做的事情。不要为框架而烦恼,因为这是你的第一次。
当你运行它的时候,试试像Spring这样的框架。

dauxcl2d

dauxcl2d5#

这取决于你的网站有多复杂。选项有Apache HttpClient(加上像JTidy这样的东西)或者像HtmlUnit或Canoo WebTest这样的面向测试的包。HtmlUnit非常强大--比如,你可以处理JavaScript。

kmbjn2e3

kmbjn2e36#

Jetty有一个很好的客户端库。我喜欢使用它,因为我经常需要在创建客户端的沿着创建一个服务器。Apache HTTP客户端真的很好,似乎有一些更多的功能,比如能够使用SSL解析代理。

vc6uscn9

vc6uscn97#

如果你真的想模拟一个浏览器,那么试试SeleniumRC

相关问题