私は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で通常のログインページを再度表示しています。
同じことに関する提案は大歓迎です!
ありがとう....
例を挙げて、あなたの質問の答えを示します。 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.
問題がjavascriptリダイレクトである場合、javascriptにアクセスして、リダイレクト先のURLが静的かどうかを確認し、リダイレクトを使用してアクセスを取得できます。私は一度JavaScriptで作成されたポップアップボックスにアクセスするためにそれをしました。
地図を使用して投稿データを送信することもできます。より管理され、きれいに見えます。 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();
}
}