Пример #1
0
        /// <summary>
        /// Load InstaApi session
        /// </summary>
        async void LoadSession()
        {
            try
            {
                var file = await LocalFolder.GetFileAsync(StateFileName);

                var json = await FileIO.ReadTextAsync(file);

                if (string.IsNullOrEmpty(json))
                {
                    return;
                }

                InstaApi = InstaApiBuilder.CreateBuilder()
                           .SetUser(UserSessionData.Empty)
                           .Build();
                InstaApi.LoadStateDataFromString(json);
                if (!InstaApi.IsUserAuthenticated)
                {
                    InstaApi = null;
                    return;
                }
                UsernameText.Text     = InstaApi.GetLoggedUser().UserName;
                PasswordText.Password = InstaApi.GetLoggedUser().Password;
                "Connected".ChangeAppTitle();
            }
            catch { InstaApi = null; }
        }
Пример #2
0
        /// <summary>
        /// Load InstaApi session
        /// </summary>
        async void LoadSession()
        {
            try
            {
                var file = await LocalFolder.GetFileAsync(StateFileName);

                var json = await FileIO.ReadTextAsync(file);

                if (string.IsNullOrEmpty(json))
                {
                    return;
                }

                var userSession = new UserSessionData
                {
                    // no need to set username password
                    // but we have to set something in it
                    UserName = "******",
                    Password = "******"
                };
                InstaApi = InstaApiBuilder.CreateBuilder()
                           .SetUser(userSession)
                           .Build();
                InstaApi.LoadStateDataFromString(json);
                if (!InstaApi.IsUserAuthenticated)
                {
                    InstaApi = null;
                    return;
                }
                UsernameText.Text     = InstaApi.GetLoggedUser().UserName;
                PasswordText.Password = InstaApi.GetLoggedUser().Password;
                "Connected".ChangeAppTitle();
            }
            catch { InstaApi = null; }
        }
Пример #3
0
        async Task RealtimeSub()
        {
            var user = _instaApi.GetLoggedUser().LoggedInUser;
            var dic  = new Dictionary <string, List <string> >
            {
                { "sub",
                  new List <string>
                  {
                      GraphQLSubscriptions.GetAppPresenceSubscription(),
                GraphQLSubscriptions.GetZeroProvisionSubscription(_instaApi.GetCurrentDevice().DeviceGuid.ToString()),
                      GraphQLSubscriptions.GetDirectStatusSubscription(),
                      GraphQLSubscriptions.GetDirectTypingSubscription(user?.Pk.ToString()),
                      GraphQLSubscriptions.GetAsyncAdSubscription(user?.Pk.ToString())
                  } }
            };
            var json       = JsonConvert.SerializeObject(dic);
            var bytes      = Encoding.UTF8.GetBytes(json);
            var dataStream = new MemoryStream(512);

            using (var zlibStream = new ZlibStream(dataStream, CompressionMode.Compress, CompressionLevel.Level9, true))
            {
                await zlibStream.WriteAsync(bytes, 0, bytes.Length);
            }

            var compressed    = dataStream.GetWindowsRuntimeBuffer(0, (int)dataStream.Length);
            var publishPacket = new PublishPacket(QualityOfService.AtLeastOnce, false, false)
            {
                Payload   = compressed,
                PacketId  = (ushort)CryptographicBuffer.GenerateRandomNumber(),
                TopicName = "/ig_realtime_sub"
            };
            await FbnsPacketEncoder.EncodePacket(publishPacket, _outboundWriter);
        }
Пример #4
0
        public static string GetEncryptedPassword(this IInstaApi api, string password, long?providedTime = null)
        {
            var pubKey   = api.GetLoggedUser().PublicKey;
            var pubKeyId = api.GetLoggedUser().PublicKeyId;

            byte[] randKey = new byte[32];
            byte[] iv      = new byte[12];
            secureRandom.NextBytes(randKey, 0, randKey.Length);
            secureRandom.NextBytes(iv, 0, iv.Length);
            long time = providedTime ?? DateTime.UtcNow.ToUnixTime();

            byte[] associatedData = Encoding.UTF8.GetBytes(time.ToString());
            var    pubKEY         = Encoding.UTF8.GetString(Convert.FromBase64String(pubKey));

            byte[] encryptedKey;
            using (var rdr = PemKeyUtils.GetRSAProviderFromPemString(pubKEY.Trim()))
                encryptedKey = rdr.Encrypt(randKey, false);

            byte[] plaintext = Encoding.UTF8.GetBytes(password);

            var cipher     = new GcmBlockCipher(new AesEngine());
            var parameters = new AeadParameters(new KeyParameter(randKey), 128, iv, associatedData);

            cipher.Init(true, parameters);

            var ciphertext = new byte[cipher.GetOutputSize(plaintext.Length)];
            var len        = cipher.ProcessBytes(plaintext, 0, plaintext.Length, ciphertext, 0);

            cipher.DoFinal(ciphertext, len);

            var con = new byte[plaintext.Length];

            for (int i = 0; i < plaintext.Length; i++)
            {
                con[i] = ciphertext[i];
            }
            ciphertext = con;
            var tag = cipher.GetMac();

            byte[] buffersSize   = BitConverter.GetBytes(Convert.ToInt16(encryptedKey.Length));
            byte[] encKeyIdBytes = BitConverter.GetBytes(Convert.ToUInt16(pubKeyId));
            if (BitConverter.IsLittleEndian)
            {
                Array.Reverse(encKeyIdBytes);
            }
            encKeyIdBytes[0] = 1;
            var payload = Convert.ToBase64String(encKeyIdBytes.Concat(iv).Concat(buffersSize).Concat(encryptedKey).Concat(tag).Concat(ciphertext).ToArray());

            return($"#PWD_INSTAGRAM:4:{time}:{payload}");
        }
Пример #5
0
        private async void PanelForm_Load(object sender, EventArgs e)
        {
            instaApi         = User.SessionApiBuilder();
            statusLabel.Text = "Welcome, " + instaApi.GetLoggedUser().LoggedInUser.UserName + ".";

            var currentUser = await instaApi.UserProcessor.GetCurrentUserAsync();
        }
Пример #6
0
        public static async Task <bool> _loadSessionDelay()
        {
            try
            {
                var us = localSettings.Values["LastUser"] as string;
                if (string.IsNullOrEmpty(us))
                {
                    return(false);
                }
                Windows.Storage.StorageFolder storageFolder = Windows.Storage.ApplicationData.Current.LocalFolder;

                Windows.Storage.StorageFile File = await storageFolder.GetFileAsync(us + ".txt");

                Debug.WriteLine(storageFolder.Path);
                var json = await Windows.Storage.FileIO.ReadTextAsync(File);

                Debug.WriteLine(json);
                var userSession = new UserSessionData
                {
                    // ina ro nemikhad avaz koni, alaki faghat behesh midim ke tuye code badi error nade
                    UserName = "******",
                    Password = "******"
                };

                // yani inja
                InstaApi = InstaApiBuilder.CreateBuilder()
                           .SetUser(userSession)
                           //.UseLogger(new DebugLogger(LogLevel.Exceptions))
                           .SetRequestDelay(RequestDelay.FromSeconds(5, 15))
                           .Build();

                InstaApi.LoadStateDataFromString(json);

                _user = _lastUser = InstaApi.GetLoggedUser().UserName;
                _pass = InstaApi.GetLoggedUser().Password;
                Debug.WriteLine($"{_user} logged in successfully. passesh ham ine: {_pass}");
                if (InstaApi.IsUserAuthenticated)
                {
                    return(true);
                }
            }
            catch { }

            return(false);
        }
Пример #7
0
        private async Task SendPing()
        {
            try
            {
                if (_outboundWriter == null)
                {
                    return;
                }
                var packet = PingReqPacket.Instance;
                await FbnsPacketEncoder.EncodePacket(packet, _outboundWriter);

                Log($"[{_instaApi?.GetLoggedUser()?.UserName}] " + "Pinging realtime server");
            }
            catch (Exception)
            {
                Log($"[{_instaApi?.GetLoggedUser()?.UserName}] " + "Failed to ping realtime server. Shutting down.");
                Shutdown();
                await Task.Delay(5000);

                Restart();
            }
        }
Пример #8
0
        private static async Task <byte[]> ToThrift()
        {
            var device    = InstaApi.GetCurrentDevice();
            var cookies   = InstaApi.HttpRequestProcessor.HttpHandler.CookieContainer.GetCookies(InstaApi.HttpRequestProcessor.Client.BaseAddress);
            var sessionId = cookies["sessionid"]?.Value ?? string.Empty;

            await WriteString(CLIENT_ID, device.DeviceGuid.ToString().Substring(0, 20));

            #region Write struct ClientInfo
            await WriteStructBegin(CLIENT_INFO);
            await WriteInt64(USER_ID, InstaApi.GetLoggedUser().LoggedInUser.Pk);
            await WriteString(USER_AGENT, FbnsUserAgent.BuildFbUserAgent(InstaApi));
            await WriteInt64(CLIENT_CAPABILITIES, 183);
            await WriteInt64(ENDPOINT_CAPABILITIES, _payloadData.EndpointCapabilities);
            await WriteInt32(PUBLISH_FORMAT, _payloadData.PublishFormat);
            await WriteBool(NO_AUTOMATIC_FOREGROUND, _payloadData.NoAutomaticForeground);
            await WriteBool(MAKE_USER_AVAILABLE_IN_FOREGROUND, _payloadData.MakeUserAvailableInForeground);
            await WriteString(DEVICE_ID, device.DeviceGuid.ToString());
            await WriteBool(IS_INITIALLY_FOREGROUND, _payloadData.IsInitiallyForeground);
            await WriteInt32(NETWORK_TYPE, _payloadData.NetworkType);
            await WriteInt32(NETWORK_SUBTYPE, _payloadData.NetworkSubtype);

            if (_payloadData.ClientMqttSessionId == 0)
            {
                var difference = DateTime.Today.DayOfWeek - DayOfWeek.Monday;
                var lastMonday = new DateTimeOffset(DateTime.Today.Subtract(TimeSpan.FromDays(difference > 0 ? difference : 7)));
                _payloadData.ClientMqttSessionId = DateTimeOffset.Now.ToUnixTimeMilliseconds() - lastMonday.ToUnixTimeMilliseconds();
            }

            await WriteInt64(CLIENT_MQTT_SESSION_ID, _payloadData.ClientMqttSessionId);
            await WriteListInt32(SUBSCRIBE_TOPICS, new int[] { 88, 135, 149, 150, 133, 146 });
            await WriteString(CLIENT_TYPE, "cookie_auth");
            await WriteInt64(APP_ID, 567067343352427);
            await WriteString(DEVICE_SECRET, "");
            await WriteByte(CLIENT_STACK, _payloadData.ClientStack);
            await WriteFieldStop();
            await WriteStructEnd();

            #endregion

            await WriteString(PASSWORD, $"sessionid={sessionId}");
            await WriteUsername();
            await WriteFieldStop();

            return(_memoryBufferTransport.GetBuffer());
        }
Пример #9
0
 public static void AddInstaApiX(this List <IInstaApi> apis, IInstaApi api)
 {
     if (api != null)
     {
         if (apis.Count == 0)
         {
             apis.Add(api);
         }
         else
         {
             try
             {
                 if (!apis.Any(x => x.GetLoggedUser().UserName.ToLower() != api.GetLoggedUser().UserName.ToLower()))
                 {
                     apis.Add(api);
                 }
             }
             catch { apis.Add(api); }
         }
     }
 }
Пример #10
0
    public static async void RemoveInstaApi(this List <IInstaApi> apis, IInstaApi api)
    {
        try
        {
            if (api != null && api.IsUserAuthenticated)
            {
                var files = await SessionHelper.LocalFolder.GetFilesAsync();

                if (files?.Count > 0)
                {
                    var username     = api.GetLoggedUser().LoggedInUser.UserName.ToLower();
                    var selectedFile = files.FirstOrDefault(x => x.Path.ToLower().EndsWith(username + SessionFileType));
                    if (selectedFile != null)
                    {
                        await selectedFile.DeleteAsync(StorageDeleteOption.PermanentDelete);
                    }
                }
                apis.Remove(api);
            }
        }
        catch { }
    }
Пример #11
0
 public static void AddInstaApi(IInstaApi api)
 {
     if (api != null)
     {
         if (InstaApiList.Count == 0)
         {
             InstaApiList.Add(api);
         }
         else
         {
             try
             {
                 if (InstaApiList.Any(x => x.GetLoggedUser().UserName.ToLower() != api.GetLoggedUser().UserName.ToLower()))
                 {
                     InstaApiList.Add(api);
                 }
             }
             catch { InstaApiList.Add(api); }
         }
     }
 }
Пример #12
0
        private async void  loginButton_Click(object sender, EventArgs e)
        {
            string username = botPhoneTextBox.Text;
            string password = botPasswordTextBox.Text;

            var userSession = new UserSessionData
            {
                UserName = username,
                Password = password
            };

            instaApi = InstaApiBuilder.CreateBuilder()

                       .UseLogger(new DebugLogger(LogLevel.All))
                       .SetRequestDelay(RequestDelay.FromSeconds(0, 3))
                       .SetSessionHandler(new FileSessionHandler()
            {
                FilePath = "sessions\\session_" + username + ".bin"
            })
                       .SetUser(userSession)
                       .Build();

            // Load session
            LoadSession();
            if (!instaApi.GetLoggedUser().Password.Equals(password) && instaApi.IsUserAuthenticated)
            {
                MessageBox.Show("Wrong password", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            if (instaApi.IsUserAuthenticated)
            {
                this.Visible = false;
                MainForm mainForm = new MainForm(ref instaApi);
                mainForm.Show();
                //this.Close();
            }
            else
            {
                var logInResult = await instaApi.LoginAsync();

                if (logInResult.Succeeded)
                {
                    SaveSession();
                    this.Visible = false;
                    MainForm mainForm = new MainForm(ref instaApi);
                    mainForm.Show();
                    //this.Close();
                }
                else
                {
                    if (logInResult.Value == InstaLoginResult.ChallengeRequired)
                    {
                        var challenge = await instaApi.GetChallengeRequireVerifyMethodAsync();

                        if (challenge.Succeeded)
                        {
                            if (challenge.Value.SubmitPhoneRequired)
                            {
                                submitPhoneNumberPanel.Enabled = true;
                                submitPhoneNumberPanel.Visible = true;
                            }
                            else
                            {
                                if (challenge.Value.StepData != null)
                                {
                                    if (!string.IsNullOrEmpty(challenge.Value.StepData.PhoneNumber))
                                    {
                                        phoneChallengeRadio.Checked = false;
                                        phoneChallengeRadio.Visible = true;
                                        phoneChallengeRadio.Text    = challenge.Value.StepData.PhoneNumber;
                                    }
                                    if (!string.IsNullOrEmpty(challenge.Value.StepData.Email))
                                    {
                                        emailChallengeRadio.Checked = false;
                                        emailChallengeRadio.Visible = true;
                                        emailChallengeRadio.Text    = challenge.Value.StepData.Email;
                                    }
                                    challengeRequiredPanel.Enabled = true;
                                    challengeRequiredPanel.Visible = true;
                                }
                            }
                        }
                        else
                        {
                            MessageBox.Show(challenge.Info.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                    }
                    // Two factor is required
                    else if (logInResult.Value == InstaLoginResult.TwoFactorRequired)
                    {
                        // Open a panel so user can send two factor code
                        twoFAPanel.Visible = true;
                        twoFAPanel.Enabled = true;
                        loginPanel.Enabled = false;
                    }
                    else
                    {
                        MessageBox.Show(logInResult.Value.ToString(), "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }
        }
Пример #13
0
        public async Task TransferPushSocket()
        {
            //return;
            if (!_instaApi.IsUserAuthenticated || _runningTokenSource.IsCancellationRequested)
            {
                return;
            }
            if (DontTransferSocket)
            {
                return;
            }
            Log($"[{_instaApi.GetLoggedUser().UserName}] " + "Transferring sockets");
            await SendPing().ConfigureAwait(false);

            await Task.Delay(TimeSpan.FromSeconds(3.5));  // grace period

            Shutdown();
            await Socket.CancelIOAsync();


            Socket.TransferOwnership(
                SOCKET_ID
                ,
                null,
                TimeSpan.FromSeconds(KEEP_ALIVE - 60)

                );
            //Socket.Dispose();
        }
Пример #14
0
 public long GetPk()
 {
     return(_api.GetLoggedUser().LoggedInUser.Pk);
 }
Пример #15
0
        public HttpRequestMessage GetDefaultRequest(HttpMethod method, Uri uri, AndroidDevice deviceInfo)
        {
            var currentCulture = GetCurrentCulture();

#if !NET452
            System.Globalization.CultureInfo.CurrentCulture = EnglishCulture;
#endif
            var userAgent = deviceInfo.GenerateUserAgent(_apiVersion);

            var request = new HttpRequestMessage(method, uri);
            var cookies = _httpRequestProcessor.HttpHandler.CookieContainer.GetCookies(_httpRequestProcessor.Client
                                                                                       .BaseAddress);
            var mid                = cookies[InstaApiConstants.COOKIES_MID]?.Value ?? string.Empty;
            var dsUserId           = cookies[InstaApiConstants.COOKIES_DS_USER_ID]?.Value ?? string.Empty;
            var shbid              = cookies[InstaApiConstants.COOKIES_SHBID]?.Value ?? string.Empty;
            var shbts              = cookies[InstaApiConstants.COOKIES_SHBTS]?.Value ?? string.Empty;
            var rur                = cookies[InstaApiConstants.COOKIES_RUR]?.Value ?? string.Empty;
            var igDirectRegionHint = cookies[InstaApiConstants.COOKIES_IG_DIRECT_REGION_HINT]?.Value ?? string.Empty;

            request.Headers.Add(IsNewerApis ? InstaApiConstants.HEADER_X_IG_APP_LOCALE.ToLower()
                : InstaApiConstants.HEADER_X_IG_APP_LOCALE, InstaApiConstants.ACCEPT_LANGUAGE.Replace("-", "_"));

            request.Headers.Add(IsNewerApis ? InstaApiConstants.HEADER_X_IG_DEVICE_LOCALE.ToLower()
                : InstaApiConstants.HEADER_X_IG_DEVICE_LOCALE, InstaApiConstants.ACCEPT_LANGUAGE.Replace("-", "_"));

            request.Headers.Add(IsNewerApis ? InstaApiConstants.HEADER_X_IG_MAPPED_LOCALE.ToLower()
                : InstaApiConstants.HEADER_X_IG_MAPPED_LOCALE, InstaApiConstants.ACCEPT_LANGUAGE.Replace("-", "_"));

            request.Headers.Add(IsNewerApis ? InstaApiConstants.HEADER_PIGEON_SESSION_ID.ToLower()
                : InstaApiConstants.HEADER_PIGEON_SESSION_ID, deviceInfo.PigeonSessionId.ToString());

            request.Headers.Add(IsNewerApis ? InstaApiConstants.HEADER_PIGEON_RAWCLINETTIME.ToLower()
                : InstaApiConstants.HEADER_PIGEON_RAWCLINETTIME, $"{DateTime.UtcNow.ToUnixTime()}.0{Rnd.Next(10, 99)}");

            request.Headers.Add(IsNewerApis ? InstaApiConstants.HEADER_X_IG_CONNECTION_SPEED.ToLower()
                : InstaApiConstants.HEADER_X_IG_CONNECTION_SPEED, "-1kbps");

            request.Headers.Add(IsNewerApis ? InstaApiConstants.HEADER_X_IG_BANDWIDTH_SPEED_KBPS.ToLower()
                : InstaApiConstants.HEADER_X_IG_BANDWIDTH_SPEED_KBPS, deviceInfo.IGBandwidthSpeedKbps);

            request.Headers.Add(IsNewerApis ? InstaApiConstants.HEADER_X_IG_BANDWIDTH_TOTALBYTES_B.ToLower()
                : InstaApiConstants.HEADER_X_IG_BANDWIDTH_TOTALBYTES_B, deviceInfo.IGBandwidthTotalBytesB);

            request.Headers.Add(IsNewerApis ? InstaApiConstants.HEADER_X_IG_BANDWIDTH_TOTALTIME_MS.ToLower()
                : InstaApiConstants.HEADER_X_IG_BANDWIDTH_TOTALTIME_MS, deviceInfo.IGBandwidthTotalTimeMS);

            request.Headers.Add(IsNewerApis ? InstaApiConstants.HEADER_IG_APP_STARTUP_COUNTRY.ToLower()
                : InstaApiConstants.HEADER_IG_APP_STARTUP_COUNTRY, InstaApiConstants.HEADER_IG_APP_STARTUP_COUNTRY_VALUE);

            request.Headers.Add(IsNewerApis ? InstaApiConstants.HEADER_X_IG_BLOKS_VERSION_ID.ToLower()
                  : InstaApiConstants.HEADER_X_IG_BLOKS_VERSION_ID, _apiVersion.BloksVersionId);

            request.Headers.Add(IsNewerApis ? InstaApiConstants.HEADER_X_IG_BLOKS_PANORAMA_ENABLED.ToLower()
                : InstaApiConstants.HEADER_X_IG_BLOKS_PANORAMA_ENABLED, "true");

            var wwwClaim = _instaApi.GetLoggedUser()?.WwwClaim;

            if (!string.IsNullOrEmpty(wwwClaim))
            {
                request.Headers.Add(IsNewerApis ? InstaApiConstants.HEADER_X_WWW_CLAIM.ToLower()
                    : InstaApiConstants.HEADER_X_WWW_CLAIM, wwwClaim);
            }
            else
            {
                request.Headers.Add(IsNewerApis ? InstaApiConstants.HEADER_X_WWW_CLAIM.ToLower()
                    : InstaApiConstants.HEADER_X_WWW_CLAIM, InstaApiConstants.HEADER_X_WWW_CLAIM_DEFAULT);
            }

            var authorization = _instaApi.GetLoggedUser()?.Authorization;

            if (!string.IsNullOrEmpty(dsUserId) && !string.IsNullOrEmpty(authorization))
            {
                request.Headers.Add(IsNewerApis ? InstaApiConstants.HEADER_AUTHORIZATION.ToLower()
                    : InstaApiConstants.HEADER_AUTHORIZATION, authorization);
            }

            request.Headers.Add(IsNewerApis ? InstaApiConstants.HEADER_X_IG_BLOKS_IS_LAYOUT_RTL.ToLower()
                : InstaApiConstants.HEADER_X_IG_BLOKS_IS_LAYOUT_RTL, "false");

            request.Headers.Add(IsNewerApis ? InstaApiConstants.HEADER_X_IG_BLOKS_ENABLE_RENDERCODE.ToLower()
                : InstaApiConstants.HEADER_X_IG_BLOKS_ENABLE_RENDERCODE, "false");

            request.Headers.Add(IsNewerApis ? InstaApiConstants.HEADER_X_IG_DEVICE_ID.ToLower()
                : InstaApiConstants.HEADER_X_IG_DEVICE_ID, deviceInfo.DeviceGuid.ToString());

            request.Headers.Add(IsNewerApis ? InstaApiConstants.HEADER_X_IG_ANDROID_ID.ToLower()
                : InstaApiConstants.HEADER_X_IG_ANDROID_ID, deviceInfo.DeviceId);

            request.Headers.Add(IsNewerApis ? InstaApiConstants.HEADER_IG_CONNECTION_TYPE.ToLower()
                : InstaApiConstants.HEADER_IG_CONNECTION_TYPE, InstaApiConstants.IG_CONNECTION_TYPE);

            request.Headers.Add(IsNewerApis ? InstaApiConstants.HEADER_IG_CAPABILITIES.ToLower()
                : InstaApiConstants.HEADER_IG_CAPABILITIES, _apiVersion.Capabilities);

            request.Headers.Add(IsNewerApis ? InstaApiConstants.HEADER_IG_APP_ID.ToLower()
                : InstaApiConstants.HEADER_IG_APP_ID, InstaApiConstants.IG_APP_ID);

            request.Headers.Add(IsNewerApis ? InstaApiConstants.HEADER_X_IG_TIGON_RETRY.ToLower()
                : InstaApiConstants.HEADER_X_IG_TIGON_RETRY, "False");

            request.Headers.Add(IsNewerApis ? InstaApiConstants.HEADER_USER_AGENT.ToLower()
                : InstaApiConstants.HEADER_USER_AGENT, userAgent);

            request.Headers.Add(IsNewerApis ? InstaApiConstants.HEADER_ACCEPT_LANGUAGE.ToLower()
                : InstaApiConstants.HEADER_ACCEPT_LANGUAGE, InstaApiConstants.ACCEPT_LANGUAGE);


            if (!string.IsNullOrEmpty(mid))
            {
                request.Headers.Add(IsNewerApis ? InstaApiConstants.HEADER_X_MID.ToLower()
                    : InstaApiConstants.HEADER_X_MID, mid);
            }

            if (!string.IsNullOrEmpty(dsUserId) && !string.IsNullOrEmpty(authorization) && !string.IsNullOrEmpty(igDirectRegionHint))
            {
                request.Headers.Add(IsNewerApis ? InstaApiConstants.HEADER_IG_U_DIRECT_REGION_HINT.ToLower()
                    : InstaApiConstants.HEADER_IG_U_DIRECT_REGION_HINT, igDirectRegionHint);
            }

            if (!string.IsNullOrEmpty(dsUserId) && !string.IsNullOrEmpty(authorization) && !string.IsNullOrEmpty(shbid))
            {
                request.Headers.Add(IsNewerApis ? InstaApiConstants.HEADER_IG_U_SHBID.ToLower()
                    : InstaApiConstants.HEADER_IG_U_SHBID, shbid);
            }

            if (!string.IsNullOrEmpty(dsUserId) && !string.IsNullOrEmpty(authorization) && !string.IsNullOrEmpty(shbts))
            {
                request.Headers.Add(IsNewerApis ? InstaApiConstants.HEADER_IG_U_SHBTS.ToLower()
                    : InstaApiConstants.HEADER_IG_U_SHBTS, shbts);
            }

            if (!string.IsNullOrEmpty(dsUserId) && !string.IsNullOrEmpty(authorization))
            {
                request.Headers.Add(IsNewerApis ? InstaApiConstants.HEADER_IG_U_DS_USER_ID.ToLower()
                    : InstaApiConstants.HEADER_IG_U_DS_USER_ID, dsUserId);
            }

            if (!string.IsNullOrEmpty(dsUserId) && !string.IsNullOrEmpty(authorization) && !string.IsNullOrEmpty(rur))
            {
                request.Headers.Add(IsNewerApis ? InstaApiConstants.HEADER_IG_U_RUR.ToLower()
                    : InstaApiConstants.HEADER_IG_U_RUR, rur);
            }


            request.Headers.TryAddWithoutValidation(InstaApiConstants.HEADER_ACCEPT_ENCODING, InstaApiConstants.ACCEPT_ENCODING2);

            request.Headers.Add(InstaApiConstants.HOST, InstaApiConstants.HOST_URI);

            request.Headers.Add(IsNewerApis ? InstaApiConstants.HEADER_X_FB_HTTP_ENGINE.ToLower()
                : InstaApiConstants.HEADER_X_FB_HTTP_ENGINE, "Liger");

            request.Headers.Add(IsNewerApis ? InstaApiConstants.HEADER_X_FB_HTTP_IP.ToLower()
                : InstaApiConstants.HEADER_X_FB_HTTP_IP, "True");

            request.Headers.Add(IsNewerApis ? InstaApiConstants.HEADER_X_FB_SERVER_CLUSTER.ToLower()
                : InstaApiConstants.HEADER_X_FB_SERVER_CLUSTER, "True");

#if !NET452
            System.Globalization.CultureInfo.CurrentCulture = currentCulture;
#endif
            return(request);
        }
        public HttpRequestMessage GetDefaultRequest(HttpMethod method, Uri uri, AndroidDevice deviceInfo)
        {
            var userAgent = deviceInfo.GenerateUserAgent(_apiVersion);
            var request   = new HttpRequestMessage(method, uri);
            var cookies   = _httpRequestProcessor.HttpHandler.CookieContainer.GetCookies(_httpRequestProcessor.Client
                                                                                         .BaseAddress);
            var mid       = cookies[InstaApiConstants.COOKIES_MID]?.Value ?? string.Empty;
            var dsUserId  = cookies[InstaApiConstants.COOKIES_DS_USER_ID]?.Value ?? string.Empty;
            var sessionId = cookies[InstaApiConstants.COOKIES_SESSION_ID]?.Value ?? string.Empty;

            request.Headers.Add(InstaApiConstants.HEADER_X_IG_APP_LOCALE, InstaApiConstants.ACCEPT_LANGUAGE.Replace("-", "_"));
            request.Headers.Add(InstaApiConstants.HEADER_X_IG_DEVICE_LOCALE, InstaApiConstants.ACCEPT_LANGUAGE.Replace("-", "_"));
            request.Headers.Add(InstaApiConstants.HEADER_PIGEON_SESSION_ID, deviceInfo.PigeonSessionId.ToString());
            request.Headers.Add(InstaApiConstants.HEADER_PIGEON_RAWCLINETTIME, $"{DateTime.UtcNow.ToUnixTime()}.0{Rnd.Next(10, 99)}");
            request.Headers.Add(InstaApiConstants.HEADER_X_IG_CONNECTION_SPEED, "-1kbps");
            request.Headers.Add(InstaApiConstants.HEADER_X_IG_BANDWIDTH_SPEED_KBPS, deviceInfo.IGBandwidthSpeedKbps);
            request.Headers.Add(InstaApiConstants.HEADER_X_IG_BANDWIDTH_TOTALBYTES_B, deviceInfo.IGBandwidthTotalBytesB);
            request.Headers.Add(InstaApiConstants.HEADER_X_IG_BANDWIDTH_TOTALTIME_MS, deviceInfo.IGBandwidthTotalTimeMS);
            request.Headers.Add(InstaApiConstants.HEADER_IG_APP_STARTUP_COUNTRY, InstaApiConstants.HEADER_IG_APP_STARTUP_COUNTRY_VALUE);

            ////request.Headers.Add(InstaApiConstants.HEADER_X_IG_EXTENDED_CDN_THUMBNAIL_CACHE_BUSTING_VALUE, "1000");
            //if (!string.IsNullOrEmpty(_apiVersion.BloksVersionId))
            //    request.Headers.Add(InstaApiConstants.HEADER_X_IG_BLOKS_VERSION_ID, _apiVersion.BloksVersionId);
            //else
            //    request.Headers.Add(InstaApiConstants.HEADER_X_IG_BLOKS_VERSION_ID, InstaApiConstants.CURRENT_BLOKS_VERSION_ID);
            var wwwClaim = _instaApi.GetLoggedUser()?.WwwClaim;

            if (string.IsNullOrEmpty(wwwClaim))
            {
                request.Headers.Add(InstaApiConstants.HEADER_X_WWW_CLAIM, InstaApiConstants.HEADER_X_WWW_CLAIM_DEFAULT);
            }
            else
            {
                request.Headers.Add(InstaApiConstants.HEADER_X_WWW_CLAIM, wwwClaim);
            }

            var authorization = _instaApi.GetLoggedUser()?.Authorization;

            if (!string.IsNullOrEmpty(dsUserId) && !string.IsNullOrEmpty(authorization))
            {
                request.Headers.Add(InstaApiConstants.HEADER_AUTHORIZATION, authorization);
            }

            request.Headers.Add(InstaApiConstants.HEADER_X_IG_BLOKS_IS_LAYOUT_RTL, "false");
            request.Headers.Add(InstaApiConstants.HEADER_X_IG_BLOKS_ENABLE_RENDERCODE, "false");
            request.Headers.Add(InstaApiConstants.HEADER_X_IG_DEVICE_ID, deviceInfo.DeviceGuid.ToString());
            request.Headers.Add(InstaApiConstants.HEADER_X_IG_ANDROID_ID, deviceInfo.DeviceId);

            request.Headers.Add(InstaApiConstants.HEADER_IG_CONNECTION_TYPE, InstaApiConstants.IG_CONNECTION_TYPE);
            request.Headers.Add(InstaApiConstants.HEADER_IG_CAPABILITIES, _apiVersion.Capabilities);
            request.Headers.Add(InstaApiConstants.HEADER_IG_APP_ID, InstaApiConstants.IG_APP_ID);

            request.Headers.Add(InstaApiConstants.HEADER_USER_AGENT, userAgent);
            request.Headers.Add(InstaApiConstants.HEADER_ACCEPT_LANGUAGE, InstaApiConstants.ACCEPT_LANGUAGE);

            if (!string.IsNullOrEmpty(mid))
            {
                request.Headers.Add(InstaApiConstants.HEADER_X_MID, mid);
            }
            request.Headers.TryAddWithoutValidation(InstaApiConstants.HEADER_ACCEPT_ENCODING, InstaApiConstants.ACCEPT_ENCODING2);

            request.Headers.Add(InstaApiConstants.HOST, InstaApiConstants.HOST_URI);

            request.Headers.Add(InstaApiConstants.HEADER_X_FB_HTTP_ENGINE, "Liger");
            return(request);
        }