Вход в Instagram без oAuth

Я снова пытаюсь войти в Instagram, но мне приходится делать это без использования их API v2, который использует oAuth для проверки. У меня есть только логин и пароль для входа. Итак, что я сделал, так это искал способ, приложение Instagram для Android и, надеюсь, IOS делает это.

Я вижу, что он создает запрос по следующему адресу: https://instagr.am/api/v1/accounts/login/

Если вы перейдете по этой ссылке напрямую, вы, скорее всего, получите сообщение об ошибке, говорящее о том, что страница не может быть найдена. После небольшого поиска в Google я наткнулся на сообщение двухлетней давности, в котором говорится, что в Useragent мы должны содержать строку «Instagram», чтобы он работал.

Я сделал это, подделав пользовательский агент, и результат выглядит следующим образом:

{"status":"fail","message":"Your version of Instagram is out of date. Please upgrade your app in the Play Store to log in to Instagram."}

Теперь я предполагаю, что нам также нужно добавить что-то еще или некоторые другие заголовки, поэтому я искал способ перехватить запрос, отправляемый в instagram их приложением для Android или IOS.

Итак, затем я скачал Bluestack, установил и запустил Instagram на своем компьютере, используя это. Я смог установить и успешно войти в систему, но затем я не смог зарегистрировать его с помощью Чарльза, так как запрос отправляется на сервер https://.

Я также пытался получить его через Wireshark, но, к сожалению, я не очень опытен в его использовании и, следовательно, не знаю его назначения.

Может ли кто-нибудь помочь мне узнать, как войти в Instagram с помощью C# без использования oAuth, потому что у меня есть только имя пользователя и пароль?

Вероятно, я бы сам закодировал конечную часть запроса, но не могу перехватить заголовки, отправляемые в Instagram.

Кроме того, если есть что-то вроде Charles/Wireshark, которое перехватывает сетевой трафик для Android, дайте мне знать об этом.


person Walter Boss    schedule 20.01.2013    source источник


Ответы (4)


Вы должны иметь возможность перехватить запрос и увидеть заголовки запроса с помощью Fiddler, если вы можете указать своему устройству использовать подключение к Интернету вашего ПК через USB. Кажется, вы приближаетесь, но вам может понадобиться номер версии где-то в вашем запросе.

person LiquaFoo    schedule 20.01.2013
comment
Я уже пробовал использовать fiddler. Но это прокси, и он будет захватывать только те запросы, которые отправляются на указанный порт. Если для прокси-сервера ничего не установлено, скрипач не сможет перехватить этот запрос. Я ищу что-то вроде Wireshark, который захватывает на сетевом уровне, но, вздох, я не знаю, как его использовать :( + его ssl тоже зашифрован в wireshark - person Walter Boss; 20.01.2013

Да, вы можете сделать это, используя Webview Вот так.

 mWebView.setWebViewClient(new WebViewClient() {


            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                UrlQuerySanitizer.ValueSanitizer sanitizer = UrlQuerySanitizer.getAllButNulLegal();
// remember to decide if you want the first or last parameter with the same name
// If you want the first call setPreferFirstRepeatedParameter(true);
                sanitizer.sanitize(url);
                String value = sanitizer.sanitize("username"); // get your value
                if(MyBridge.getUsername()!=null)username = MyBridge.getUsername();
               return  true;

            }

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
//                showLoading();

                CookieManager.getInstance().removeAllCookies(null);
//                CookieManager.getInstance().flush();
                progressBar.setVisibility(View.VISIBLE);

            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);

                progressBar.setVisibility(View.GONE);

                if (url.equalsIgnoreCase(mURL)) {
                    view.addJavascriptInterface(new MyBridge(InstagramOfficalLoginActivity.this), "bridge");
                    String javascript = "javascript: document.getElementsByClassName(\"_0mzm- sqdOP  L3NKy       \")[0].onclick = function() {\n" +
                            "        var username = document.getElementsByName(\"username\").value;\n" +
                            "        var password = document.getElementsByName(\"password\").value;\n" +
                            "        bridge.saveData(username, password);\n" +
                            "    };";
                    view.loadUrl(javascript);
                }


                    if (isSessionid ) {
//                        username = MyBridge.getUsername();
                        //сохранение данных пользователя
                        Logins logins = new Logins();
                        logins.setUserId(InstaUtils.getUserId());
                        logins.setUserName("");
                        logins.setProfilePic("");
                        logins.setSession_id(InstaUtils.getSessionid());
                        logins.setCooki(InstaUtils.getCookies());
                        logins.setCsrf(InstaUtils.getCsrf());

                        long id = DataObjectRepositry.dataObjectRepositry.addNewUser(logins);


                        PreferencesManager.savePref(GlobalConstant.USERNAME,username);
                        PreferencesManager.savePref(GlobalConstant.USER_ID, InstaUtils.getUserId());
                        PreferencesManager.savePref(GlobalConstant.TOKEN, InstaUtils.getSessionid());
                        PreferencesManager.savePref(GlobalConstant.PROFILE_PIC,"");




                        Intent intent = new Intent(InstagramOfficalLoginActivity.this, MainActivity.class);

                        PreferencesManager.savePref("isLogin",true);
                        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
                        intent.putExtra("user", InstaUtils.getUserId());
                        intent.putExtra("database_id",String.valueOf(id));

                        mWebView.destroy();
                        mWebView = null;
                        startActivity(intent);

                    }

            }

            @Override
            public void onLoadResource(WebView view, String url) {
                super.onLoadResource(view, url);
                progressBar.setVisibility(View.GONE);
                cookies = CookieManager.getInstance().getCookie(url);

                try {
                    String session_id = getCookie(url, "sessionid");
                    String csrftoken = getCookie(url, "csrftoken");
                    String userid = getCookie(url, "ds_user_id");
                    if (session_id != null && csrftoken != null && userid != null) {
                        isSessionid = true;
                        InstaUtils.setSessionId(session_id);
                        InstaUtils.setUserId(userid);
                        InstaUtils.setCookies(cookies);
                        InstaUtils.setCsrf(csrftoken, cookies);

                    }
                }catch (Exception e){
                    e.printStackTrace();
                }


            }

            @SuppressWarnings("deprecation")
            @Override
            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                ToastUtils.ErrorToast(InstagramOfficalLoginActivity.this, description);
            }

            @TargetApi(android.os.Build.VERSION_CODES.M)
            @Override
            public void onReceivedError(WebView view, WebResourceRequest req, WebResourceError rerr) {
                // Redirect to deprecated method, so you can use it in all SDK versions
                onReceivedError(view, rerr.getErrorCode(), rerr.getDescription().toString(), req.getUrl().toString());
            }


        });

        mWebView.loadUrl(mURL);

Вы также можете скачать полностью рабочий код из моего профиля на github Вот ссылка.

Я надеюсь, что это работает, спасибо :)

person nitin    schedule 22.07.2019
comment
Не могли бы вы рассказать, почему это приложение (вы указали URL-адрес репозитория git) было удалено из игрового магазина? - person Rajnish Mishra; 31.07.2020

вы всегда можете войти через https://instagram.com/accounts/login/, имея только логин\пароль .

возможность прослушивания трафика не поможет вам, так как они теперь подписывают все свои сообщения, чтобы предотвратить то, чего вы пытаетесь достичь.

person John    schedule 08.02.2013

Вы можете найти библиотеку Instaguser здесь. https://github.com/ThinhVu/InstagramUser

Instaguser позволяет вам войти в Instagram без OAuth. На данный момент вы можете изменить информацию о пользователе: имя пользователя, биографию, ... и т.д.

person Thinh Vu    schedule 11.07.2016