C# 不使用oAuth登录Instagram
我正在尝试再次登录instagram,但我必须在不使用api v2的情况下登录,该api v2使用oAuth进行验证。 我只有用户名和密码可以登录。 所以我所做的就是寻找一种方式,安卓的instagram应用程序,希望IOS能做到这一点 我看到它在以下url创建了一个请求: 如果您直接访问该链接,您很可能会收到一个错误消息,表示无法找到该页面。在谷歌搜索了一下之后,我发现了一篇2年前的帖子,上面说在Useragent中,我们必须包含字符串“Instagram”才能让它工作 我通过伪造useragent来实现这一点,结果如下:C# 不使用oAuth登录Instagram,c#,android,networking,instagram,C#,Android,Networking,Instagram,我正在尝试再次登录instagram,但我必须在不使用api v2的情况下登录,该api v2使用oAuth进行验证。 我只有用户名和密码可以登录。 所以我所做的就是寻找一种方式,安卓的instagram应用程序,希望IOS能做到这一点 我看到它在以下url创建了一个请求: 如果您直接访问该链接,您很可能会收到一个错误消息,表示无法找到该页面。在谷歌搜索了一下之后,我发现了一篇2年前的帖子,上面说在Useragent中,我们必须包含字符串“Instagram”才能让它工作 我通过伪造usera
{"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。我能够成功地安装并登录它,但是由于请求被发送到https://服务器,因此我无法使用Charles登录它
我还试图通过Wireshark获取它,但不幸的是,我在使用它方面没有太多经验,因此不知道它的用途
那么有谁能帮我在不使用oAuth的情况下用C#登录instagram,因为我只有用户名和密码。
我可能会为请求的结尾部分编写代码,但我无法捕获发送到instagram的标题。
此外,如果有任何类似Charles/Wireshark的东西可以捕获Android的网络流量,也请务必让我知道。如果您可以通过USB告诉您的设备使用PC的互联网连接,您应该能够使用Fiddler捕获请求并查看请求头。您的请求似乎越来越接近,但可能只需要在您的请求中的某个地方输入一个版本号。您始终可以只使用login\password登录
能够嗅探流量对您没有帮助,因为他们现在会签署所有邮件,以阻止您试图实现的目标。您可以在此处找到Instaguser library Instaguser允许您在不使用OAuth的情况下登录instagram。
目前,您可以更改用户信息:用户名、传记等。。。等等。是的,您可以使用
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配置文件中下载完整的工作代码
我希望它能工作,谢谢:)我已经试过使用fiddler了。但它是一个代理,只捕获发送到指定端口的请求。如果将代理设置为nothing,则fiddler将无法捕获该请求。我正在寻找类似Wireshark的东西,它可以在网络级别捕获,但是,唉,我不知道它的用途:(+它的ssl在Wireshark中也加密了。)你想分享一下为什么这个应用程序(你给git repo的url)被从playstore中删除吗