我想通过 Java 编程语言访问 HTMl 页面上的表单,而不涉及真正的浏览器。
目前我正在通过HTML UNIT执行此操作,但加载页面需要更多时间。在访问数百万页时,这个额外的时间是最重要的。
有没有其他方法可以做到这一点?
我想通过 Java 编程语言访问 HTMl 页面上的表单,而不涉及真正的浏览器。
目前我正在通过HTML UNIT执行此操作,但加载页面需要更多时间。在访问数百万页时,这个额外的时间是最重要的。
有没有其他方法可以做到这一点?
我以前使用过类似的东西,称为httpunit,但我不知道它如何比较性能。
如果您有数百万页要处理,我建议您在其中添加更多线程。只是一个猜测,但我认为如果你将其扩展到多个线程,你会在耗尽 CPU 能力之前耗尽带宽(在这种情况下,它可能有多快并不重要)
使用浏览器访问网页,甚至是 HtmlUnit,都会很慢。更好的方法是测试 Web 界面正下方的层,这样您就不需要访问数百万个页面 - 相反,您需要进行足够的测试以确保 Web 界面正确使用较低的层。
浏览器中的大部分交互都归结为 HTTP GET 或 HTTP POST。您需要准确地确定您需要的操作,然后您可以构建 URL 和/或表单数据。然后你可以使用这样的东西:
try {
//Construct data
String data = URLEncoder.encode("key1", "UTF-8") + "=" + URLEncoder.encode("value1", "UTF-8"); data += "&" + URLEncoder.encode("key2", "UTF-8") + "=" + URLEncoder.encode("value2", "UTF-8");
// Send data
URL url = new URL("http://hostname:80/cgi");
URLConnection conn = url.openConnection(); conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data);
wr.flush();
// Get the response
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line; while ((line = rd.readLine()) != null) {
// Process line... }
wr.close();
rd.close();
} catch (Exception e) { }