Jsoupを使用してウェブサイトにログインするには何が必要ですか?私は自分のコードが正しいと信じていますが、Jsoupを使ってウェブサイトにログインしたことがないので、何か不足している可能性があります。ここに私のコードです:。ウェブサイトにログインする(Jsoup)
try {
String url = ("http://quadrigacx.com/login");
Connection.Response loginForm = (Connection.Response)Jsoup.connect(url)
.method(Connection.Method.GET)
.execute();
Document loginDoc = loginForm.parse();
Elements loginElements = loginDoc.select("input:not([name=client_id]):not([name=password])");
int i = 0;
String v[] = new String[loginElements.size()];
for (Element element: loginElements){
v[i++] = element.attr("value");
}
int ii = 0;
String n[] = new String[loginElements.size()];
for (Element element: loginElements){
n[ii++] = element.attr("name");
}
Connection.Response loginFormLogin = (Connection.Response)Jsoup.connect(url)
.cookies(loginForm.cookies())
.data(n[0],v[0])
.data("client_id", "xxxxxxx")
.data("password", "xxxxxx")
.data(n[1],v[1])
.data(n[2],v[2])
.method(Connection.Method.POST)
.execute();
Document document2 = Jsoup.connect("http://quadrigacx.com/settings")
.cookies(loginFormLogin.cookies())
.get();
System.out.print(document2.toString());
} catch (IOException ex) {
Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
}
document2
は、それが正常にログインしていない示してログインページを返すありtime
という名前の入力値であり、私はそれが動作しない理由、それはあるかもしれないと思います。時間の経過とともに上昇する値です。私はコードを2回実行し、時間変数は1511226860
と1511226876
を返しました。私のコードは文書を印刷するのに約10秒かかるので、time
の変数は投稿要求を送信するまでに既に変更されている可能性がありますか?これが問題かどうかはわかりません。多分私は見ていない何か他のものがありますか?ありがとう。
編集:ここにコードがあります。私はすでにユーザーIDとパスワードでログインした後に認証を送信します。 loginCookies
は最初のログインのCookieです。 Connection.Response auth = Jsoup.connect("https://quadrigacx.com/authenticate") .userAgent("Mozilla") .method(Connection.Method.POST) .cookies(loginCookies) .data("google_code", googleCode.getText()) .data("email_code", emailCode.getText()) .data("authenticate", "Authenticate") .followRedirects(true) .execute();
私も試してみました: byte[] gcText = googleCode.getText().getBytes(ISO_8859_1); String gcValue = new String(gcText, UTF_8); byte[] ecText = emailCode.getText().getBytes(ISO_8859_1); String ecValue = new String(ecText, UTF_8); Connection.Response auth = Jsoup.connect("https://quadrigacx.com/authenticate") .userAgent("Mozilla") .method(Connection.Method.POST) .cookies(loginCookies) .data("google_code", gcValue) .data("email_code", ecValue) .data("authenticate", "Authenticate") .followRedirects(true) .execute();
パスワードがサーバーに「そのまま」送信されていません。ブラウザの開発ツールを開くと、何らかの方法でハッシュ/暗号化されていることがわかります。そのため、プロセスを把握して模倣する必要があります。私はSHA256とQCXという名前のスクリプトから始めます。別のオプションは、サイトにAPIがあるかどうかを確認することです。 – TDG
呼び出されたSHA256が見つかりませんでしたが、この '$(document).ready(function(){ if(clientId && pword) $( '#password')。val(QCX.security.hashクライアントのIDがハッシュされていることを意味しますか? –
@TDGこのような場合、私は手動でログインできた方が簡単だろうと思います –