27

我正在尝试将数据发布到网站以使用 Jsoup 登录网站,但它不起作用?

我正在尝试代码

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

在这里,它在 pagesource 中提供了正常的登录页面

我也试过代码

 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();

这里也在pagesource中再次给出正常的登录页面。

任何有关相同的建议将不胜感激!

谢谢....

4

3 回答 3

34

我将通过一个例子来回答你的问题。假设您要登录 facebook。

然后除了用户名和密码之外,还有许多其他参数也通过POST请求传递。这些所有参数都是隐藏的,并且像用户名和密码一样传递。例如 :

如果你打开html sourcefacebook,你可以看到有一个隐藏的参数是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.
于 2012-04-04T14:16:12.690 回答
2

如果问题是 javascript 重定向,您可以尝试进入 javascript 并检查它重定向到的 URL 是否是静态的,然后使用重定向来获得访问权限。我这样做是为了访问一次由 javascript 制作的弹出框。

于 2012-08-04T17:06:00.123 回答
0

发布数据也可以使用 Map 发送。看起来更管理和干净。有时网站会检查某些标头的存在,因此传递这些标头以使请求尽可能相似。大多数情况下,内容类型是预期的。

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();
    }
}
于 2019-01-15T10:43:00.233 回答