コード例 #1
0
        public async Task <ProfileResult> GetProfile()
        {
            Debug.WriteLine("Get profile");
            CookieContainer reserve = mCoockieC;

            for (int i = 0; i < 5; i++)
            {
                try
                {
                    var request = HttpRequestBuilder.Get("https://www.instagram.com/accounts/edit/?__a=1", _userAgent, mCoockieC);
                    request.Referer = $"https://www.instagram.com/{Username}/";
                    request.Headers["X-Requested-With"] = "XMLHttpRequest";
                    request.AllowAutoRedirect           = false;
                    request.Proxy = _proxy;
                    using (var response = await request.GetResponseAsync() as HttpWebResponse)
                    {
                        mCoockieC.Add(response.Cookies);
                        using (var responseStream = response.GetResponseStream())
                            using (var gzipStream = new GZipStream(responseStream, CompressionMode.Decompress))
                                using (var streamReader = new StreamReader(gzipStream))
                                {
                                    var data = streamReader.ReadToEnd();

                                    return(JsonConvert.DeserializeObject <ProfileResult>(data));
                                }
                    }
                }
                catch (Exception ex)
                {
                    Debug.WriteLine("GetProfile progress occur exception " + ex.Message);
                    lock (LogIO.locker) logging.Invoke(LogIO.mainLog, new Log()
                        {
                            UserName = null, Date = DateTime.Now, LogMessage = $"Exception! {ex.Message}", Method = "HttpAndroid.GetProfile"
                        });
                    mCoockieC = reserve;
                    continue;
                }
            }
            return(null);
        }
コード例 #2
0
        public async Task <string> GetUserName(string shortcode)
        {
            try
            {
                var request = HttpRequestBuilder.Get($"https://www.instagram.com/p/{shortcode}/", _cookieContainer);
                request.Referer = $"https://www.instagram.com/p/{shortcode}/";

                request.Headers["X-Requested-With"] = "XMLHttpRequest";
                request.Headers["X-IG-App-ID"]      = "936619743392459";
                request.Headers["X-Instagram-GIS"]  = "07872401bf58d36857235616ae5cc596";
                request.AllowAutoRedirect           = false;
                using (var response = await request.GetResponseAsync() as HttpWebResponse)
                {
                    _cookieContainer.Add(response.Cookies); // may be exep
                    using (var responseStream = response.GetResponseStream())
                        using (var gzipStream = new GZipStream(responseStream, CompressionMode.Decompress))
                            using (var streamReader = new StreamReader(gzipStream))
                            {
                                var data   = streamReader.ReadToEnd();
                                var splits = data.Split(new[] { "\"@id\":\"https:\\/\\/www.instagram.com\\/" }, StringSplitOptions.None);
                                var resss  = splits[1].Split('\\')[0];
                                return(resss);
                            }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine("GetProfile progress occur exception " + ex.Message);
                if (ex.Message.Contains("404"))
                {
                    return(null);
                }

                logging.Invoke(LogIO.mainLog, new Log()
                {
                    Date = DateTime.Now, Message = ex.Message, Method = "FindHashtagPhotos"
                });
                throw ex;
            }
        }
コード例 #3
0
        public async Task <HashResult> FindHashtagPhotos()
        {
            try
            {
                var request = HttpRequestBuilder.Get($"https://www.instagram.com/explore/tags/{Hashtag}/?__a=1", _cookieContainer);
                request.Referer = $"https://www.instagram.com/explore/tags/{Hashtag}/";
                request.Headers["X-Requested-With"] = "XMLHttpRequest";
                request.Headers["X-IG-App-ID"]      = "936619743392459";
                request.Headers["X-Instagram-GIS"]  = "07872401bf58d36857235616ae5cc596";
                request.AllowAutoRedirect           = false;
                using (var response = await request.GetResponseAsync() as HttpWebResponse)
                {
                    _cookieContainer.Add(response.Cookies); // may be exep
                    using (var responseStream = response.GetResponseStream())
                        using (var gzipStream = new GZipStream(responseStream, CompressionMode.Decompress))
                            using (var streamReader = new StreamReader(gzipStream))
                            {
                                var data = streamReader.ReadToEnd();
                                return(JsonConvert.DeserializeObject <HashResult>(data));
                            }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine("GetProfile progress occur exception " + ex.Message);
                if (ex.Message.Contains("404"))
                {
                    return(null);
                }

                logging.Invoke(LogIO.mainLog, new Log()
                {
                    Date = DateTime.Now, Message = ex.Message, Method = "FindHashtagPhotos"
                });
                throw ex;
            }
        }
コード例 #4
0
        public async Task <LoginResult> LogIn()
        {
            Debug.WriteLine("Login");
            bool GZip = false;

            for (int i = 0; i < 5; i++)
            {
                try
                {
                    var bootstrapRequest = HttpRequestBuilder.Get("https://www.instagram.com/accounts/login/", _userAgent, mCoockieC);
                    bootstrapRequest.Proxy  = _proxy;
                    bootstrapRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*;q=0.8";
                    bootstrapRequest.Headers["Upgrade-Insecure-Requests"] = "1";
                    using (var bootstrapResponse = await bootstrapRequest.GetResponseAsync() as HttpWebResponse)
                    {
                        if (bootstrapResponse.Cookies.Count == 0)
                        {
                            continue;
                        }
                        mCoockieC.Add(bootstrapResponse.Cookies);
                    }
                }
                catch (Exception bex)
                {
                    Debug.WriteLine("Bootstrap progress meet exception " + bex.Message);
                    throw bex; //Status==ConnectFailure
                }
                try
                {
                    string data    = $"username={Username}&password={Password}";
                    byte[] content = Encoding.UTF8.GetBytes(data);

                    HttpWebRequest request = HttpRequestBuilder.Post("https://www.instagram.com/accounts/login/ajax/", _userAgent, mCoockieC);


                    request.Referer       = "https://www.instagram.com/accounts/login/";
                    request.ContentType   = "application/x-www-form-urlencoded";
                    request.ContentLength = content.Length;
                    request.KeepAlive     = true;
                    request.Headers["Accept-Encoding"] = "gzip, deflate, br";
                    request.Headers["Accept-Language"] = "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7";

                    request.Headers["Origin"] = "https://www.instagram.com";

                    request.Headers["X-CSRFToken"]      = mCoockieC.GetCookies(new Uri("https://instagram.com"))["csrftoken"].Value;
                    request.Headers["X-Instagram-AJAX"] = "0cf1e9388e80"; // You may need to change this one to get rid of 404 bad request.
                    request.Headers["X-Requested-With"] = "XMLHttpRequest";

                    request.AllowAutoRedirect = true;
                    request.Proxy             = _proxy;
                    // Send login data
                    using (Stream requestStream = await request.GetRequestStreamAsync())
                    {
                        using (StreamWriter dataStreamWriter = new StreamWriter(requestStream))
                        {
                            requestStream.Write(content, 0, content.Length);
                        }
                        HttpWebResponse response = null;
                        try
                        {
                            response = await request.GetResponseAsync() as HttpWebResponse;
                        }
                        catch (WebException e)
                        {
                            response = (HttpWebResponse)e.Response;
                        }

                        string responseData;

                        //GZip convert
                        if (GZip)
                        {
                            using (Stream dataS = response.GetResponseStream())
                                using (var gzipStream = new GZipStream(dataS, CompressionMode.Decompress))
                                    using (var streamReader = new StreamReader(dataS))
                                        responseData = streamReader.ReadToEnd();
                        }
                        else
                        {
                            using (Stream dataS = response.GetResponseStream())
                                using (var streamReader = new StreamReader(dataS))
                                    responseData = streamReader.ReadToEnd();

                            if (responseData.Contains("0"))
                            {
                                GZip = true;
                                continue;
                            }
                        }

                        mCoockieC.Add(response.Cookies);

                        if (responseData == "Request Timeout")
                        {
                            return new LoginResult()
                                   {
                                       status = responseData
                                   }
                        }
                        ;

                        if (GZip)
                        {
                            try
                            {
                                LoginResult result = JsonConvert.DeserializeObject <LoginResult>(responseData);
                                if (result.authenticated == true)
                                {
                                    return new LoginResult()
                                           {
                                               status = "success"
                                           }
                                }
                                ;
                                else
                                {
                                    return new LoginResult()
                                           {
                                               status = "ok"
                                           }
                                };
                            }
                            catch { return(new LoginResult()
                                {
                                    status = "success"
                                }); }
                        }

                        try
                        {
                            RootobjectChallenge result = JsonConvert.DeserializeObject <RootobjectChallenge>(responseData);

                            if (result.message == "checkpoint_required")
                            {
                                return(new LoginResult()
                                {
                                    status = "checkpoint_required"
                                });
                            }
                            return(new LoginResult()
                            {
                                status = "ok"
                            });
                        }
                        catch
                        {
                            return(new LoginResult()
                            {
                                status = "ok"
                            });
                        }
                    }
                }
                catch (Exception ex)
                {
                    Debug.WriteLine("Login progress occur exception " + ex.Message);
                    lock (LogIO.locker) logging.Invoke(LogIO.mainLog, new Log()
                        {
                            UserName = null, Date = DateTime.Now, LogMessage = $"Exception! {ex.Message}", Method = "HttpAndroid.LogIn"
                        });
                    mCoockieC = new CookieContainer();

                    continue;
                }
            }
            return(null);
        }
コード例 #5
0
        public bool ConfirmMail(string path, Dictionary <string, object> mailProxyDictionary)
        {
            bool check = false;

            for (int i = 0; i < 2; i++)
            {
                WebProxy mailProxy = new WebProxy();
                try
                {
                    mailProxy.Address = new Uri($"{mailProxyDictionary["ip"]}:{mailProxyDictionary["port"]}");
                    if (mailProxyDictionary.Count > 2)
                    {
                        mailProxy.Credentials = new NetworkCredential(mailProxyDictionary["proxyLogin"].ToString(), mailProxyDictionary["proxyPassword"].ToString());
                    }
                }
                catch
                {
                    mailProxy = _proxy;
                }
                if (check)
                {
                    mailProxy = _proxy;
                }

                try
                {
                    var mailRequest = HttpRequestBuilder.Get($"{path}", _userAgent, mCoockieC);
                    mailRequest.Proxy  = mailProxy;
                    mailRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3";
                    mailRequest.Headers["Upgrade-Insecure-Requests"] = "1";
                    using (var bootstrapResponse = mailRequest.GetResponse() as HttpWebResponse)
                    {
                        using (Stream dataS = bootstrapResponse.GetResponseStream())
                            using (var streamReader = new StreamReader(dataS))
                            {
                                string responseData = streamReader.ReadToEnd();
                                return(true);
                            }
                    }
                }
                catch (Exception bex)
                {
                    Debug.WriteLine("Bootstrap progress meet exception " + bex.Message);
                    lock (LogIO.locker) logging.Invoke(LogIO.mainLog, new Log()
                        {
                            UserName   = null,
                            Date       = DateTime.Now,
                            LogMessage = $"Finded exception {bex.Data}",
                            Method     = "HttpAndroid.ConfirmMail"
                        });
                    if (!check)
                    {
                        check = true;
                    }
                    else
                    {
                        return(false);
                    }
                }
            }
            return(false);
        }
コード例 #6
0
        public async Task <UpdateProfileResult> UpdateProfile(ProfileResult profile, string mail)
        {
            Debug.WriteLine("Update profile");
            CookieContainer reserve  = mCoockieC;
            Exception       exeption = new Exception();

            for (int i = 0; i < 5; i++)
            {
                string chainingEnable = "", data = "";

                try
                {
                    chainingEnable = profile.form_data.chaining_enabled ? "on" : "off";
                    data           = $"first_name={WebUtility.UrlEncode(profile.form_data.first_name)}&email={mail}&username={WebUtility.UrlEncode(profile.form_data.username)}&phone_number={WebUtility.UrlEncode(String.Empty)}&gender={profile.form_data.gender}&biography={WebUtility.UrlEncode(profile.form_data.biography)}&external_url={WebUtility.UrlEncode(profile.form_data.external_url)}&chaining_enabled={chainingEnable}";
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(ex.Message);
                    lock (LogIO.locker) logging.Invoke(LogIO.mainLog, new Log()
                        {
                            UserName = null, Date = DateTime.Now, LogMessage = $"{ex.Message}", Method = "HttpAndroid.LogIn"
                        });
                    throw;
                }
                try
                {
                    var content = Encoding.ASCII.GetBytes(data);
                    var request = HttpRequestBuilder.Post("https://www.instagram.com/accounts/edit/", _userAgent, mCoockieC);
                    request.Referer           = "https://www.instagram.com/accounts/edit/";
                    request.ContentType       = "application/x-www-form-urlencoded";
                    request.ContentLength     = content.Length;
                    request.KeepAlive         = true;
                    request.Headers["Origin"] = "https://www.instagram.com";

                    // maybe exception if mCookieC not contain csrftoken
                    request.Headers["X-CSRFToken"]      = mCoockieC.GetCookies(new Uri("https://www.instagram.com"))["csrftoken"].Value;
                    request.Headers["X-Instagram-AJAX"] = "1";
                    request.Headers["X-Requested-With"] = "XMLHttpRequest";
                    request.Proxy = _proxy;
                    using (var requestStream = request.GetRequestStream())
                    {
                        requestStream.Write(content, 0, content.Length);
                        HttpWebResponse response = null;
                        try
                        {
                            response = await request.GetResponseAsync() as HttpWebResponse;
                        }
                        catch (WebException e)
                        {
                            response = (HttpWebResponse)e.Response;
                        }
                        using (var responseStream = response.GetResponseStream())
                            using (var streamReader = new StreamReader(responseStream))
                            {
                                // If we get result, it always return status ok. Otherwise, exception will occur.
                                mCoockieC.Add(response.Cookies);
                                var responseData = streamReader.ReadToEnd();
                                return(JsonConvert.DeserializeObject <UpdateProfileResult>(responseData));
                            }
                    }
                }
                catch (Exception ex)
                {
                    // When you change your username with existed username, you will receive 404 error
                    // and obviously exception will occur. In this case, just return false
                    exeption = ex;
                    Debug.WriteLine("UpdateProfile progress occur exception " + ex.Message);
                    lock (LogIO.locker) logging.Invoke(LogIO.mainLog, new Log()
                        {
                            UserName = null, Date = DateTime.Now, LogMessage = $"Exception! {ex.Message}", Method = "HttpAndroid.UpdateProfile"
                        });
                    mCoockieC = reserve;
                    continue;
                }
            }
            throw exeption;
        }