web-dev-qa-db-ja.com

方法POST Jsoupを使用してWebサイトにデータを入力する

私はPOSTデータをウェブサイトに入れて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で通常のログインページを再度表示しています。

同じことに関する提案は大歓迎です!

ありがとう....

23
Aspirant

例を挙げて、あなたの質問の答えを示します。 Facebookにログインするとします。

次に、ユーザー名とパスワードの他に、POSTリクエストを介して渡される他の多くのパラメーターがあります。これらのパラメーターはすべて非表示で、ユーザー名やパスワードのように同様に渡されます。例えば ​​:

Facebookのhtml sourceを開くと、隠されているパラメーターは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.
31
vikiiii

問題がjavascriptリダイレクトである場合、javascriptにアクセスして、リダイレクト先のURLが静的かどうかを確認し、リダイレクトを使用してアクセスを取得できます。私は一度JavaScriptで作成されたポップアップボックスにアクセスするためにそれをしました。

2
Ethan

地図を使用して投稿データを送信することもできます。より管理され、きれいに見えます。 Webサイトは、いくつかのヘッダーの存在をチェックすることがあるため、それらのヘッダーを渡して、要求をできるだけ正確に要求します。ほとんどの場合、コンテンツタイプが期待されます。

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();
    }
}
0
Manasi