从java程序验证用户 - java

时间:2013-09-21 05:55:38

标签: java authentication jsoup

我正在尝试抓取需要身份验证的网页。我登录时可以在浏览器中访问该页面,使用JSoup http://jsoup.org/库来解析HTML页面。

public static void main(String[] args) throws IOException {

    // need http protocol
    Document doc = Jsoup.connect("http://www.secinfo.com/$/SEC/Filing.asp?T=r643.91Dx_2nx").get();

    // get page title

    String title = doc.title();
    System.out.println("title : " + title);

    // get all links
    Elements links = doc.select("a");
    for (Element link : links) {                   
        // get the value from href attribute
        System.out.println("\nlink : " + link.attr("href"));                   
    }
            System.out.println();

  }

输出:

title : SEC Info - Sign In

这是获取登录页面的内容而不是我传递的实际网址。我在secinfo.com上注册,在运行此程序时,我从默认浏览器Firefox登录。

3 个答案:

答案 0 :(得分:0)

即使您使用默认浏览器登录,这也无济于事。您的java程序是一个单独的进程,它不与您的浏览器共享屏幕。

另一方面,secinfo需要身份验证,JSoup允许您传递身份验证详细信息。

当我传递身份验证详细信息时,它适用于我:

请检查此答案(Jsoup connection with basic access authentication

答案 1 :(得分:0)

如果您的目标网站的登录机制与connect()请求一起使用,Jsoup的post()也支持使用方法链接POST

Document doc = Jsoup.connect("url")
  .data("aUserName", "myUserName")
  .data("aPassword", "myPassword")
  .userAgent("Mozilla")
  .timeout(3000)
  .post();

但是,如果您尝试获取的页面需要后续cookie发送每个请求,该怎么办?尝试将HttpURLConnectionPOST一起使用,并从HTTP连接响应标头中读取cookieHttpClient会让您更轻松地完成此任务。使用库以字符串形式获取网页,然后将字符串传递给jsoup.parse()函数以获取文档。

答案 2 :(得分:0)

您必须使用post命令登录并保留您获得的Cookie。这是存储会话信息的地方。我在这里写了一个例子:Jsoup can't Login on Page。 示例中的网站是一个例外,它在登录页面上设置了会话cookie。如果适合你,你可以离开那一步。

确切的post命令可能因网站而异。你必须从html中挖掘它,或者你必须在浏览器中安装一个插件并拦截post命令。