如何使用Jsoup将数据发布到网站

27

我正在尝试使用Jsoup将数据POST到网站以进行登录,但它无法正常工作?

这是我的代码

    Document docs = Jsoup.connect("http://some.com/login")
        .data("cmd", "login","username", "xxxx","password", "yyyyy")
        .referrer("http://some.com/login/").post();

这里返回的是登录页面的正常源代码。

我也尝试了这段代码。

 Document docs = (Document) Jsoup.connect("http://some.com/login")
    .data("cmd", "login","username", "xxxx","password", "yyyyy")
    .referrer("http://some.com/login/").method(Method.POST).execute().parse();

在这里,页面源代码也只是给出了正常的登录页面。

如果对此有任何建议,将不胜感激!!

谢谢....


我现在也遇到了同样的问题,您是如何解决这个问题的? - Mr.Cool
3个回答

34

我将通过举一个例子回答您的问题。

假设您想登录Facebook账户。

除了用户名和密码之外,还有许多其他参数也会通过POST请求传递。这些所有参数都是隐藏的,并且与用户名和密码类似地传递。

例如:

如果您打开Facebook的html源代码,您可以看到有一个隐藏的参数lgnrnd,它的值为071129_5D7M

因此,还有许多类似于此的其他参数。您需要传递所有这些参数。您还应该指定userAgent

Document doc = Jsoup.connect("http://www.facebook.com")
.data("email", "myemailid")
.data("pass", "mypassword")
// and other hidden fields which are being passed in post request.
.userAgent("Mozilla")
.post();
System.out.println(doc); // will print html source of homepage of facebook.

1
如果您想登录的网站不是私人网站,那么您可以告诉我,我可以提供更多帮助。请勿使用引荐和尝试。 - vikiiii
我不明白你的意思,我之前的代码已经添加了数据("cmd","login")!! - Aspirant
抱歉,我忘记了。现在代码是完美的。我不知道为什么无法登录。我会注册并让您知道。 - vikiiii
2
我不认为你做错了什么。我已经通过jsoup在Facebook上登录了。Jsoup有其局限性,无法处理JavaScript。 - vikiiii
所以Jsoup无法在JavaScript上工作!好的,你能告诉我如何在Jsoup中配置代理吗? - Aspirant
显示剩余6条评论

2
如果问题是由JavaScript重定向引起的,您可以尝试进入JavaScript并检查它重定向到的URL是否是静态的,然后使用重定向来获取访问权限。我曾经这样做过一次,以便访问由JavaScript创建的弹出框。

0

可以使用Map来发送数据。看起来更有管理和整洁。有时候网站会检查某些标头的存在性,所以要传递这些标头,使请求尽可能与预期相似。大多数情况下,期望的是content-type。

package test;

import java.util.HashMap;
import java.util.Map;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

/**
 * POST example
 * 
 * @author iampayload
 *
 */
public class JsoupPost {

    private final String USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:65.0) Gecko/20100101 Firefox/65.0";

    private final String urlPost = "https://www.huawei.com/en/accounts/PersonalPost";

    // main class
    public static void main(String[] args) throws Exception {
    JsoupPost http = new JsoupPost();
    http.sendPost();
    }

    // HTTP Post request
    private void sendPost() throws Exception {

    Map<String, String> postData = new HashMap<>();
    postData.put("username", "xxxx");
    postData.put("cmd", "login");
    postData.put("password", "yyyyy");

    Document doc = Jsoup.connect(urlPost).ignoreContentType(true).userAgent(USER_AGENT).data(postData).post();
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接