Esempio n. 1
0
        /// <summary>
        /// Login to store more cookies
        /// </summary>
        /// <param name="username"></param>
        /// <param name="password"></param>
        public LoginResult LogIn()
        {
            try
            {
                // Get bootstrap cookie
                var bootstrapRequest = HttpRequestBuilder.Get("https://www.instagram.com/accounts/login/", mCoockieC);
                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 = bootstrapRequest.GetResponse() as HttpWebResponse)
                {
                    mCoockieC.Add(bootstrapResponse.Cookies);
                }
            }
            catch (Exception bex)
            {
                Debug.WriteLine("Bootstrap progress meet exception " + bex.Message);
                throw bex;
            }

            try
            {
                var data    = $"username={Username}&password={Password}";
                var content = Encoding.ASCII.GetBytes(data);

                var request = HttpRequestBuilder.Post("https://www.instagram.com/accounts/login/ajax/", mCoockieC);
                // Missing referer get 403 - forbiden status code
                request.Referer                     = "https://www.instagram.com/accounts/login/";
                request.ContentType                 = "application/x-www-form-urlencoded";
                request.ContentLength               = content.Length;
                request.KeepAlive                   = true;
                request.Headers["Origin"]           = "https://www.instagram.com";
                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";

                // Send login data
                using (var requestStream = request.GetRequestStream())
                {
                    requestStream.Write(content, 0, content.Length);
                    using (var response = request.GetResponse() as HttpWebResponse)
                        using (var responsStream = response.GetResponseStream())
                            using (var streamReader = new StreamReader(responsStream))
                            {
                                var responseData = streamReader.ReadToEnd();

                                return(JsonConvert.DeserializeObject <LoginResult>(responseData));
                            }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine("Login progress occur exception " + ex.Message);
                throw ex;
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Update user profile
        /// </summary>
        /// <param name="user"></param>
        /// <returns>dynamic data maybe dangerous but i think some time dangerous is good LOL!!! - cause i'm lazy</returns>
        private UpdateProfileResult UpdateProfile(ProfileResult profile)
        {
            Debug.WriteLine("Update profile");

            string chainingEnable = "", data = "";

            try
            {
                chainingEnable = profile.form_data.chaining_enabled ? "on" : "off";
                data           = $"first_name={WebUtility.UrlEncode(profile.form_data.first_name)}&email={profile.form_data.email}&username={WebUtility.UrlEncode(profile.form_data.username)}&phone_number={WebUtility.UrlEncode(profile.form_data.phone_number)}&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);
                throw;
            }

            try
            {
                var content = Encoding.ASCII.GetBytes(data);
                var request = HttpRequestBuilder.Post("https://www.instagram.com/accounts/edit/", 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";

                using (var requestStream = request.GetRequestStream())
                {
                    requestStream.Write(content, 0, content.Length);
                    using (var response = request.GetResponse() as HttpWebResponse)
                    {
                        mCoockieC.Add(response.Cookies);
                        using (var responseStream = response.GetResponseStream())
                            using (var streamReader = new StreamReader(responseStream))
                            {
                                // If we get result, it always return status ok. Otherwise, exception will occur.
                                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
                Debug.WriteLine(ex.Message);
                throw ex;
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Report - return Models.ReportResult
        /// </summary>
        /// <param name="postId"></param>
        /// <returns></returns>
        public ReportResult Report(string postId, ReportReasonId reasonId)
        {
            var data    = "reason_id=" + (int)reasonId;
            var content = Encoding.ASCII.GetBytes(data);
            var request = HttpRequestBuilder.Post($"https://www.instagram.com/media/{postId}/flag/", mCoockieC);

            request.ContentType                 = "application/x-www-form-urlencoded";
            request.Referer                     = $"https://www.instagram.com/";
            request.ContentLength               = content.Length;
            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";
            try
            {
                using (var stream = request.GetRequestStream())
                {
                    stream.Write(content, 0, content.Length);
                }
                using (var response = request.GetResponse() as HttpWebResponse)
                {
                    mCoockieC.Add(response.Cookies);
                    if (request.HaveResponse)
                    {
                        using (var responseStream = response.GetResponseStream())
                            using (var streamReader = new StreamReader(responseStream))
                            {
                                var responseData = streamReader.ReadToEnd();
                                return(JsonConvert.DeserializeObject <ReportResult>(responseData));
                            }
                    }
                    else
                    {
                        throw new WebException("no response");
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
                throw ex;
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Like
        /// </summary>
        /// <param name="postId"></param>
        /// <returns></returns>
        public LikeResult Like(string postId)
        {
            // Note that to get postId, you simple get postlink then add /?__a=1
            // result return is jsonresult contain all infomation about this post.
            // you can like, comment,... example
            // https://www.instagram.com/p/BHtOw-7gKGs/?__a=1
            var request = HttpRequestBuilder.Post($"https://www.instagram.com/web/likes/{postId}/like/", mCoockieC);

            request.Referer = $"https://www.instagram.com";
            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";
            try
            {
                using (var response = request.GetResponse() as HttpWebResponse)
                {
                    mCoockieC.Add(response.Cookies);
                    if (request.HaveResponse)
                    {
                        using (var responseStream = response.GetResponseStream())
                            using (var streamReader = new StreamReader(responseStream))
                            {
                                var responseData = streamReader.ReadToEnd();
                                return(JsonConvert.DeserializeObject <Models.LikeResult>(responseData));
                            }
                    }
                    else
                    {
                        throw new WebException("no response");
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
                throw ex;
            }
        }
Esempio n. 5
0
        /// <summary>
        /// Follow
        /// </summary>
        /// <param name="username"></param>
        /// <returns></returns>
        public FollowResult Follow(string username)
        {
            Debug.WriteLine("Following " + username);
            var publicInfo = GetPublicInfo(username);
            var request    = HttpRequestBuilder.Post($"https://www.instagram.com/web/friendships/{publicInfo.user.id}/follow/", mCoockieC);

            request.Referer = $"https://www.instagram.com/{publicInfo.user.username}/";
            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";
            try
            {
                using (var response = request.GetResponse() as HttpWebResponse)
                {
                    mCoockieC.Add(response.Cookies);
                    if (request.HaveResponse)
                    {
                        using (var responseStream = response.GetResponseStream())
                            using (var streamReader = new StreamReader(responseStream))
                            {
                                var responseData = streamReader.ReadToEnd();
                                return(JsonConvert.DeserializeObject <FollowResult>(responseData));
                            }
                    }
                    else
                    {
                        throw new WebException("no response");
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
                throw ex;
            }
        }