Ejemplo n.º 1
0
        public WindowsHttpClientAdapter(string mediaType = "application/json")
        {
            _mediaType = mediaType;
            var header = new HttpMediaTypeWithQualityHeaderValue(mediaType);

            _client.DefaultRequestHeaders.Accept.Add(header);
        }
Ejemplo n.º 2
0
        public WebApiService(ISerializationService serializationService)
        {
            _serializationService = serializationService;
            _adapter = new WindowsHttpClientAdapter(out var client);
            var header = new HttpMediaTypeWithQualityHeaderValue("application/json");

            client.DefaultRequestHeaders.Accept.Add(header);
        }
Ejemplo n.º 3
0
        private HttpClient Client()
        {
            var http   = new HttpClient();
            var header = new HttpMediaTypeWithQualityHeaderValue(applicationJson);

            http.DefaultRequestHeaders.Accept.Add(header);
            return(http);
        }
Ejemplo n.º 4
0
        private void SetDefaults()
        {
            _client.DefaultRequestHeaders.Accept.Add(HttpMediaTypeWithQualityHeaderValue.Parse("application/json"));
            _client.DefaultRequestHeaders.Host = new Windows.Networking.HostName("api.producthunt.com");

            if (TokenExists = CheckIfTokenExists())
            {
                LoadToken();
            }
        }
Ejemplo n.º 5
0
        private static async Task <AccountBalance> GetBalance(ProperHttpClient clientWrapper, string number, string password)
        {
            var cookiesUri = new Uri("https://mans.lmt.lv/");

            // Dzēš iepriekšējās sesijas kūkas. ToList novēŗš dzēšanas konfliktu.
            foreach (var cookie in clientWrapper.CookieManager.GetCookies(cookiesUri).ToList())
            {
                clientWrapper.CookieManager.DeleteCookie(cookie);
            }

            var client = clientWrapper.Client;
            // Ielādē sākumlappusi. Sāk sesiju un noskaidro pieteikšanās žetonu.
            var response = await client.SendRequestAsync(new HttpRequestMessage(HttpMethod.Head, new Uri("https://mans.lmt.lv/lv/auth")));

            Debug.WriteLine("LMT home " + response.StatusCode);
            if (response.StatusCode != HttpStatusCode.Ok)
            {
                return(null);
            }

            string csrf       = clientWrapper.CookieManager.GetCookies(cookiesUri).First(c => c.Name == "lmt_csrf_cookie_name").Value;
            var    jsonHeader = new HttpMediaTypeWithQualityHeaderValue("application/json");
            var    xhrHeader  = new KeyValuePair <string, string>("X-Requested-With", "XMLHttpRequest");

            // Piesakās ar tālruņa numuru un paroli. Nodotās galvenes ir obligātas.
            var request = new HttpRequestMessage(HttpMethod.Post, new Uri("https://mans.lmt.lv/lv/auth/login"));

            request.Headers.Accept.Add(jsonHeader);
            request.Headers.Add(xhrHeader);
            request.Content = new HttpFormUrlEncodedContent(new Dictionary <string, string>(4)
            {
                { "lmt_csrf_name", csrf },
                { "login-name", number },
                { "login-pass", password }
                //{ "login-code", string.Empty }
            });
            response = await client.SendRequestAsync(request);

            Debug.WriteLine("LMT login " + response.StatusCode);
            // {"success":true,"step":"\/lv\/auth\/access_info"}
            var json = await response.Content.ReadAsStringAsync();

            Debug.WriteLine(json);
            if (response.StatusCode != HttpStatusCode.Ok || !json.StartsWith("{\"success\":true"))
            {
                return(null);
            }

            // Lai mazinātu varbūtību, ka nākamais izsaukums atgriezīs "wait", gaida 2 sekundes tāpat kā LMT skripts.
            await Task.Delay(2000);

            // Apstiprina pieteikšanos. Vienkārši obligāts solis.
            request = new HttpRequestMessage(HttpMethod.Get, new Uri("https://mans.lmt.lv/lv/auth/access_info"));
            request.Headers.Accept.Add(jsonHeader);
            request.Headers.Add(xhrHeader);
            response = await client.SendRequestAsync(request);

            Debug.WriteLine("LMT authenticate " + response.StatusCode);
            // {"redirect":"\/lv\/index.php"} vai {"wait":true}
            json = await response.Content.ReadAsStringAsync();

            Debug.WriteLine(json);
            if (response.StatusCode != HttpStatusCode.Ok || !json.StartsWith("{\"redirect\":"))
            {
                return(null);
            }

            // Iziet caur pāradresācijām, pieprasot lappusi ar atlikuma datiem.
            response = await client.GetAsync(new Uri("https://mans.lmt.lv/lv/index.php"));

            Debug.WriteLine("LMT balance redirect 1 {0} {1}", response.StatusCode, response.Headers.Location);
            if (response.StatusCode != HttpStatusCode.Found)
            {
                return(null);
            }
            response = await client.GetAsync(new Uri("https://mans.lmt.lv/lv/"));           // https://mans.lmt.lv/lv/

            Debug.WriteLine("LMT balance redirect 2 {0} {1}", response.StatusCode, response.Headers.Location);
            if (response.StatusCode != HttpStatusCode.Found)
            {
                return(null);
            }
            response = await client.GetAsync(response.Headers.Location);           // https://mans.lmt.lv/lv/icenter/info.php

            Debug.WriteLine("LMT balance redirect 3 {0} {1}", response.StatusCode, response.Headers.Location);
            if (response.StatusCode != HttpStatusCode.Found)
            {
                return(null);
            }
            response = await client.GetAsync(response.Headers.Location);           // https://mans.lmt.lv/lv/icenter/

            Debug.WriteLine("LMT balance " + response.StatusCode);
            if (response.StatusCode != HttpStatusCode.Ok)
            {
                return(null);
            }

            string html = await response.Content.ReadAsStringAsync();

            // HTMLā ir dažādas rindu pārneses, bet šajā blokā CR-LF. Lauka nosaukums un datuma formāts krievu valodā atšķiras, bet šeit visi pieprasījumi attiecas uz latviešu valodu.
            var      match   = Regex.Match(html, @"<td class=""text okavanss""><span class=""ls"">Ls</span><span class=""eiro"">€</span> *([0-9]+\.[0-9][0-9])</td>.+Avansa derīguma termiņš</a></th>\r\n\s+<td class=""text okavanss"">([0-3][0-9]\.[01][0-9]\.[0-9]{4})\. plkst\. ([012][0-9]:[0-5][0-9])</td>", RegexOptions.Singleline);
            decimal  amount  = decimal.Parse(match.Groups[1].Value, CultureInfo.InvariantCulture);
            DateTime expires = DateTime.ParseExact(match.Groups[2].Value, "dd.MM.yyyy", CultureInfo.InvariantCulture).Add(TimeSpan.ParseExact(match.Groups[3].Value, "hh\\:mm", CultureInfo.InvariantCulture));

            Debug.WriteLine("LMT amount " + amount + " expires " + expires.ToString("F"));
            // Aizver sesiju. Sesijas ilgums kopš pieteikšanās ir viena stunda.
            response = await client.GetAsync(new Uri("https://mans.lmt.lv/lv/?logout=true"));

            Debug.WriteLine("LMT logout " + response.StatusCode);
            // Ignorē pāradresācijas, jo galvenais izsaukums jau veikts.
            if (response.StatusCode != HttpStatusCode.Found)
            {
                return(null);
            }
            return(new AccountBalance(amount, expires));
        }
Ejemplo n.º 6
0
        public async Task RequestUrl(WebMessage web)
        {
            var request = new HttpClient();
            HttpResponseMessage response = null;

            request.DefaultRequestHeaders.Accept.Add(HttpMediaTypeWithQualityHeaderValue.Parse("text/html"));
            request.DefaultRequestHeaders.Accept.Add(HttpMediaTypeWithQualityHeaderValue.Parse("application/xhtml+xml"));
            request.DefaultRequestHeaders.Accept.Add(HttpMediaTypeWithQualityHeaderValue.Parse("application/xml"));
            request.DefaultRequestHeaders.Accept.Add(HttpMediaTypeWithQualityHeaderValue.Parse("application/json"));
            request.DefaultRequestHeaders.Accept.Add(HttpMediaTypeWithQualityHeaderValue.Parse("*/*"));

            request.DefaultRequestHeaders.UserAgent.Add(HttpProductInfoHeaderValue.Parse("Mozilla/5.0"));

            try
            {
                if (web.Action != null)
                {
                    switch (web.Action.ToUpperInvariant())
                    {
                    case "POST":
                    {
                        var content = new HttpStringContent(web.Data, UnicodeEncoding.Utf8, "application/json");

                        request.DefaultRequestHeaders.Accept.Add(
                            new HttpMediaTypeWithQualityHeaderValue("application/json"));

                        response = await request.PostAsync(new Uri(web.Url), content);

                        break;
                    }

                    case "GET":
                    {
                        request.DefaultRequestHeaders.Accept.Add(
                            new HttpMediaTypeWithQualityHeaderValue("application/json"));
                        response = await request.GetAsync(new Uri(web.Url));

                        break;
                    }
                    }

                    response?.EnsureSuccessStatusCode();
                }

                if (response != null)
                {
                    var result = new ResultMessage(web)
                    {
                        ResultId = (int)response.StatusCode, Type = 'W'
                    };

                    if (!string.IsNullOrWhiteSpace(web.Parse) || web.Len > 0)
                    {
                        var temp = await response.Content.ReadAsStringAsync();

                        if (!string.IsNullOrWhiteSpace(web.Parse))
                        {
                            var parser = new Parser {
                                Content = temp, Instructions = web.Parse
                            };
                            if (parser.Parse())
                            {
                                if (parser.IsDictionary)
                                {
                                    mainPage.mainDictionary[parser.Tablename] = parser.Dictionary;
                                    temp            = parser.Tablename;
                                    result.ResultId = parser.Dictionary.Count();
                                }
                                else
                                {
                                    temp = parser.Result;
                                }
                            }
                        }

                        result.Result = string.IsNullOrWhiteSpace(temp)
                            ? string.Empty
                            : temp.Substring(0, Math.Min(temp.Length, web.Len == 0 ? 200 : web.Len));
                    }

                    await mainPage.SendResult(result);
                }
            }
            catch (Exception e)
            {
                await mainPage.SendResult(new ResultMessage(web) { ResultId = e.HResult, Result = e.Message });
            }
        }