import com.sun.me.web.request.Arg ;import com.sun.me.web.request.Request ;import com.sun.me.web.request.Response ;import org.json.me.JSONObject ;/ **** @author andryk* /パブリック クラス VkApi {public static VkApi instance = new VkApi ( ) ;public static final String URL = "api.vkontakte.ru/api.php" ;//アプリケーションデータを入力しますpublic static final String APP_ID = "" ;/ *アプリケーションのハッシュ。ブラウザで認証ページに移動し、コードで変数「var auth_hash」を探しますこのハッシュは認証に必要です。* /private static final String APP_HASH = "" ;private static final Arg FORM_HEADER = new Arg ( "Content-Type" 、 "application / x-www-form-urlencoded" ) ;保護された 文字列 userId ;保護された 文字列 sid ;保護された 文字列の秘密。保護された 文字列の有効期限。protected boolean isLogged = false ;protected boolean needCaptcha = false ;protected String captchaSid = "" 、captchaKey = "" ;public PopupBox captcha = null ;保護された VkApi ( ) {}protected String findS ( String source ) throws Exception {システム アウト 。 println (ソース) ;文字列パターン= "id = 's' value = '" ;int start = source。 indexOf (パターン) ;文字列 s =ソース。 substring ( start + pattern。length ( ) 、start + pattern。length ( ) + 56 ) ;if ( s。length ( ) != 56 ) {新しい 例外を スロー ( 「フォームに見つかりません」 ) ;}return s ;}public boolean isLogged ( ) {return isLogged ;}public boolean isNeedCaptcha ( ) {needCaptchaを返します。}public String getSecret ( ) {秘密を返す}public String getUserId ( ) {return userId ;}public String getSid ( ) {return sid ;}クラス NeedCaptchaException は Exceptionを 拡張し ます {文字列 sid ;Public NeedCaptchaException ( String s ) {sid = s ;}public String getUrl ( ) {return "api.vk.com/captcha.php?sid=" + sid + "&s = 1" ;}public String getSid ( ) {return sid ;}}public void setCaptchaKey ( String captchaKey ) {これ 。 captchaKey = captchaKey ;}public void login ( String login、 String password ) {{応答結果= 要求 。 post ( "login.vk.com/" 、 新しい Arg [ ] {new Arg ( "act" 、 "login" ) 、 new Arg ( "app" 、APP_ID ) 、新しい 引数 ( "app_hash" 、APP_HASH ) 、 新しい 引数 ( "captcha_key" 、captchaKey ) 、新しい 引数 ( "captcha_sid" 、captchaSid ) 、new Arg ( "email" 、login ) 、 new Arg ( "pass" 、password ) 、new Arg ( "permanent" 、 "1" ) 、 new Arg ( "vk" 、 "" )} 、 新しい Arg [ ] { FORM_HEADER } 、 null 、 null 、 null ) ;//リダイレクトコードが何らかの問題を意味する場合。if ( result。getCode ( ) == 302 ) {文字列 sid = null ;int start = -1 ;for ( int i = 0 ; i < result。getHeaders ( ) 。 length ; i ++ ) {if ( result。getHeaders ( ) [ i ] 。getKey ( ) 。 toLowerCase ( ) 。 equals ( "location" ) ) {文字列 l =結果。 getHeaders ( ) [ i ] 。 getValue ( ) ;開始= l。 indexOf ( "m = 1&cs =" ) ;int end = l。 indexOf ( "&" 、start + 7 ) ;sid = l。 部分文字列 (開始+ 7 、終了) ;休憩 ;}}//または、キャプチャ入力が必要if ( start > 0 0 )新しい NeedCaptchaException ( sid )を スローし ます。//またはユーザー名/パスワードが間違っています他に新しい 例外を スロー ( 「間違ったログイン/パス」 ) ;}needCaptcha = false ;//前のCookieを使用して新しいリクエストを送信します応答result2 = リクエスト 。 get ( "login.vk.com/?vk=" 、 null 、 null 、 null 、 result。getCookies ( ) ) ;// SIDを見つけます//。getResult()。getRaw()-応答本文s = findS ( result2。getResult ( ) 。 getRaw ( ) ) ;//必要なデータを見つける最後の3つのクエリ応答result3 = リクエスト 。 get ( "vkontakte.ru/login.php?app=" + APP_ID + "&layout = popup&type = browser&settings = 1054" 、 null 、 null 、 null 、 new Arg [ ] { new Arg ( "remixsid" 、s ) } ) ;文字列 r = result3。 getResult ( ) 。 getRaw ( ) ;int start = r。 indexOf ( "{ \" mid \ " " ) ;//セッションデータを含むJSONオブジェクトを見つけました文字列 sess = r。 substring ( start、 r。indexOf ( "}" 、start ) + 1 ) ;//読む必要がありますJSONObjectセッション= 新しい JSONObject ( sess ) ;//データを記憶しますuserId =セッション。 getString ( "mid" ) ;sid =セッション。 getString ( "sid" ) ;シークレット=セッション。 getString ( "secret" ) ;期限切れ=セッション。 getString ( "expire" ) ;isLogged = true ;} catch ( NeedCaptchaException e ) {//ユーザーにキャプチャを印刷します。画像アドレスはe.getUrl()です//その後、コードを設定しますsetCaptchaKey(String key)//そして再度ログインします} catch ( 例外 e ) {isLogged = false ;//ユーザー名/パスワードが間違っている場合のアクション}}}
Source: https://habr.com/ru/post/J92693/More articles:情報カオスMaxi Plus:MTSはようやく加入者に良いことをしましたか?ベラルーシ人の30%がインターネットを使用MediaHackDay:メディアおよびITプロジェクトを開発します「インターネットは別のテレビにはなりません。」 (そして確かにFidonetは彼にならないでしょう。)Lubuntu 10.04リリースビニールキラー。 文字通り進化Google Street View Surveillance Camerasの写真SCTエラー回復制御All Articles