2

我正在尝试再次登录 instagram,但我必须在不使用他们的 api v2 的情况下执行此操作,该 api v2 使用 oAuth 进行验证。我唯一拥有的是用于登录的用户名和密码。所以我所做的就是寻找适用于 Android 的 Instagram 应用程序,并希望 IOS 能做到这一点。

我看到它在以下网址创建了一个请求: https ://instagr.am/api/v1/accounts/login/

如果您直接访问该链接,您很可能会收到一条错误消息,指出无法找到该页面。经过一番谷歌搜索,我发现了一篇 2 年前的帖子,其中指出在 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."}

现在,我猜我们还需要添加其他内容或其他一些标头,所以我正在寻找一种方法来获取他们的 Android 或 IOS 应用程序发送到 instagram 的请求。

所以接下来我下载了 Bluestack 并使用它在我的计算机上安装并运行了 instagram。我能够成功安装并登录它,但后来我无法使用 Charles 记录它,因为请求被发送到 https:// 服务器

我也尝试通过 Wireshark 来获取它,但不幸的是,我在使用它方面没有太多经验,因此不知道它的用途。

所以任何人都可以帮助我了解如何在不使用 oAuth 的情况下使用 C# 登录 instagram,因为我只有用户名和密码。

我可能会编写请求自己的最后部分,但我无法捕获发送到 instagram 的标题。

此外,如果有任何类似 Charles/Wireshark 的东西可以捕获 Android 的网络流量,也请告诉我。

4

4 回答 4

2

如果您可以告诉您的设备通过 USB 使用您的电脑互联网连接,您应该能够使用 Fiddler 捕获请求并查看请求标头。看起来你已经接近了,但可能只需要在你的请求中的某个地方提供一个版本号。

于 2013-01-20T07:02:43.827 回答
1

是的,你可以使用Webview Here you go

 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 个人资料下载完整的工作代码,是链接。

我希望它有效,谢谢:)

于 2019-07-22T15:46:31.053 回答
0

您始终可以通过https://instagram.com/accounts/login/只有登录名\密码登录。

具有嗅探流量的能力对您没有帮助,因为他们现在签署所有消息以防止您尝试实现的目标。

于 2013-02-08T12:02:25.700 回答
0

你可以在这里找到 Instaguser 库。https://github.com/ThinhVu/InstagramUser

Instaguser 允许您在没有 OAuth 的情况下登录 instagram。目前,您可以更改用户信息:用户名、简历等。

于 2016-07-11T08:26:56.810 回答