Пример #1
0
        public async void Create()
        {
            try
            {
                HttpResponseMessage response = await _registrationClient.GetAsync("https://www.instagram.com");

                var responseCookies = _cookieContainer.GetCookies(new Uri("https://www.instagram.com")).Cast <Cookie>().ToList();

                _registrationClient.DefaultRequestHeaders.Add("Origin", "https://www.instagram.com");
                _registrationClient.DefaultRequestHeaders.Add("Referer", "https://www.instagram.com/");
                _registrationClient.DefaultRequestHeaders.Add("X-Requested-With", "XMLHttpRequest");
                _registrationClient.DefaultRequestHeaders.Add("X-Instagram-AJAX", "1");
                _registrationClient.DefaultRequestHeaders.Add("X-CSRFToken", responseCookies[0].Value);

                HtmlDocument htmlDocument = new HtmlDocument();
                htmlDocument.LoadHtml(await response.Content.ReadAsStringAsync());

                var    javascriptEngine = new Jurassic.ScriptEngine();
                object evalResult       = javascriptEngine.Evaluate("(function() { var window = {}; " + htmlDocument.DocumentNode.SelectNodes("//script[@type='text/javascript']")[4].InnerHtml + " return window._sharedData; })()");

                JObject scriptJson = JObject.Parse(JSONObject.Stringify(javascriptEngine, evalResult));

                _cookieContainer.Add(new Cookie("ig_pr", scriptJson["display_properties_server_guess"]["pixel_ratio"].ToString())
                {
                    Domain = "instagram.com"
                });
                _cookieContainer.Add(new Cookie("ig_vw", scriptJson["display_properties_server_guess"]["viewport_width"].ToString())
                {
                    Domain = "instagram.com"
                });

                NameValueCollection queryString = HttpUtility.ParseQueryString(string.Empty);

                queryString["first_name"] = _instagramUsername;
                queryString["username"]   = _instagramUsername;
                queryString["password"]   = _instagramPassword;
                queryString["email"]      = _instagramEmail;

                StringContent queryStringContent = new StringContent(queryString.ToString());
                queryStringContent.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");

                HttpResponseMessage creationResponse = await _registrationClient.PostAsync("https://www.instagram.com/accounts/web_create_ajax/", queryStringContent);

                JObject responseJson = JObject.Parse(await creationResponse.Content.ReadAsStringAsync());

                if (responseJson["account_created"].ToObject <bool>())
                {
                    if (OnSuccess != null)
                    {
                        OnSuccess.BeginInvoke(this, null, null);
                    }
                }
                else
                {
                    if (responseJson["errors"] != null)
                    {
                        StringBuilder stringBuilder = new StringBuilder();

                        foreach (JProperty error in responseJson["errors"])
                        {
                            stringBuilder.Append(error.Value[0] + " ");
                        }

                        if (OnWarning != null)
                        {
                            OnWarning.BeginInvoke(stringBuilder.ToString(), null, null);
                        }
                    }
                }
            }
            catch (Exception ioException) when(ioException is IOException)
            {
            }
            catch (Exception requestException) when(requestException is HttpRequestException)
            {
                if (requestException.InnerException is WebException)
                {
                    if (((WebException)requestException.InnerException).Status == WebExceptionStatus.ConnectFailure)
                    {
                        if (OnFailure != null)
                        {
                            OnFailure.BeginInvoke(string.Format("'{0}' failed to connect to Instagram.", Proxy), null, null);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                //ignore the other exceptions
            }
        }