Jsoup,在执行表单POST之前获取值

时间:2014-08-19 19:39:12

标签: java forms jsoup httpclient

以下是我用于提交表单的代码:

Connection.Response res = Jsoup.connect("http://example.com")
    .data("id", "myID")
    .data("username", "myUsername")
    .data("code", "MyAuthcode") // get the value of Auth code from page element
    .method(Method.POST).execute();

要成功提交给定表单,带[name =" code"]的字段需要设置值。

可以在另一个元素的页面上找到该值。在如上所示实际提交表单之前,如何使用相同的连接获取元素的值?

我需要使用元素中的值,才能成功填写表单。

2 个答案:

答案 0 :(得分:1)

Jsoup实际上为每个请求打开了一个新的HTTP连接,所以你的要求不太可能,但你可以接近:

// Define where to connect (doesn't actually connect)
Connection connection = Jsoup.connect("http://example.com");

// Connect to the server and get the page
Document doc = connection.get();

// Extract the value from the page
String authCode = doc.select("input[name='code']").val();

// Add the required data to the request
connection.data("id", "myID")
    .data("username", "myUsername")
    .data("code", authCode);

// Connect to the server and do a post
Connection.Response response = connection.method(Method.POST).execute();

这将为每个自己的连接发出两个HTTP请求(GET和POST各一个)。

如果您真的只想要一个连接,则必须使用不同的工具连接到服务器(例如Apache - HTTPClient)。你仍然可以使用jsoup来解析你使用Jsoup.parse()得到的内容。

答案 1 :(得分:0)

您需要从GET调用中获取cookie并将其添加到后续的POST调用中,以便维护该会话。请查看此帖Getting Captcha image using jsoup

中的解决方案