コード例 #1
0
        public HttpMockState()
        {
            // dependencies
            TestHandler = new HttpMockHandler(this);
            HttpClient = new HttpClient(TestHandler);

            // data
            Request = new Request
            {
                Method = AngleSharp.Network.HttpMethod.Post,
                Address = new Url("http://example/path?query=value"),
                Headers = new Dictionary<String, String>
                {
                    {"User-Agent", "Foo/2.0"},
                    {"Cookie", "foo=bar"},
                    {"Content-Type", "application/json"},
                    {"Content-Length", "9"}
                },
                Content = new MemoryStream(Encoding.UTF8.GetBytes("\"request\""))
            };
            HttpResponseMessage = new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new StringContent("\"response\"", Encoding.UTF8, "application/json"),
                Headers =
                {
                    {"Server", "Fake"},
                    {"X-Powered-By", "Magic"},
                    {"X-CSV", new[] {"foo", "bar"}}
                }
            };

            // setup
            Target = new HttpClientRequester(HttpClient);
        }
コード例 #2
0
        /// <summary>
        /// Setup the Uri requester complete with user agent etc.
        /// </summary>
        /// <returns>Task that completes when the requester is ready to use.</returns>
        protected override Task SetupRequesterAsync()
        {
            var httpClientRequester = new HttpClientRequester();

            httpClientRequester.HttpClient.DefaultRequestHeaders.UserAgent.ParseAdd(ClientUserAgent);

            var systemUserAgent = WindowsSystemInfo.GetSystemUserAgent();

            if (!String.IsNullOrEmpty(systemUserAgent))
            {
                httpClientRequester.HttpClient.DefaultRequestHeaders.UserAgent.ParseAdd(systemUserAgent);
            }

            Requester = httpClientRequester.Request;

            return(Task.FromResult(true));
        }
        /// <summary>
        /// Setup the Uri requester complete with user agent etc.
        /// </summary>
        /// <returns>Task that completes when the requester is ready to use.</returns>
        protected override void SetupRequester()
        {
            var httpClientRequester = new HttpClientRequester();

            httpClientRequester.HttpClient.DefaultRequestHeaders.UserAgent.ParseAdd(ClientUserAgent);

            var systemUserAgent = WindowsSystemInfo.GetSystemUserAgent();

            if (!String.IsNullOrEmpty(systemUserAgent))
            {
                httpClientRequester.HttpClient.DefaultRequestHeaders.UserAgent.ParseAdd(systemUserAgent);
            }

            Requester = httpClientRequester.Request;

            //Note(LC): This doesn't seem needed anymore
            //return Task.FromResult(true);
        }
コード例 #4
0
        public static async Task MainAsync(string[] args)
        {
            // setup
            var httpClient = new HttpClient();
            var requester = new HttpClientRequester(httpClient);
            var configuration = new Configuration(new[] { new LoaderService(new[] { requester }) });
            var context = BrowsingContext.New(configuration);

            // request
            var request = DocumentRequest.Get(Url.Create("http://httpbin.org/html"));
            var response = await context.Loader.LoadAsync(request, CancellationToken.None);

            // parse
            var document = await context.OpenAsync(response, CancellationToken.None);

            // interact
            Console.WriteLine(document.QuerySelector("h1").ToHtml());
        }
コード例 #5
0
        public async Task EndToEnd()
        {
            if (Helper.IsNetworkAvailable())
            {
                // ARRANGE
                var httpClient    = new HttpClient();
                var requester     = new HttpClientRequester(httpClient);
                var configuration = Configuration.Default.With(requester).WithDefaultLoader();
                var context       = BrowsingContext.New(configuration);
                var request       = DocumentRequest.Get(Url.Create("http://httpbin.org/html"));

                // ACT
                var response = await context.GetService <IDocumentLoader>().FetchAsync(request).Task;

                var document = await context.OpenAsync(response, CancellationToken.None);

                // ASSERT
                document.QuerySelector("h1").ToHtml().Should().Be("<h1>Herman Melville - Moby-Dick</h1>");
            }
        }
コード例 #6
0
        public static async Task <CookieCollection> GetCollectitonAsync()
        {
            var collection = new CookieCollection();

            var cookiesFile = "data/cookies.txt";

            if (File.Exists(cookiesFile))
            {
                var readAllText = File.ReadAllLines(cookiesFile).Where(s => !s.TrimStart().StartsWith("#"));
                foreach (var line in readAllText)
                {
                    var match = RegexCookiesTxt.Match(line);
                    if (match.Success)
                    {
                        try
                        {
                            var name  = match.Groups[6].Value;
                            var value = match.Groups[7].Value;

                            if (name == "myCookie")
                            {
                                value = "username=&userPsw=";
                            }

                            collection.Add(new Cookie(name, value, match.Groups[3].Value, match.Groups[1].Value));
                        }
                        catch (Exception e)
                        {
                            Log.Warning(e.Message);
                        }
                    }
                }
            }

            await SemaphoreSlim.WaitAsync();

            if (AntiScrappingCookie == null)
            {
                try
                {
                    var httpClient = new HttpClient();
                    httpClient.DefaultRequestHeaders.CacheControl = new CacheControlHeaderValue {
                        NoCache = true
                    };

                    httpClient.DefaultRequestHeaders.TryAddWithoutValidation(
                        "user-agent",
                        ScrappingConfiguration.Agent);

                    var requester = new HttpClientRequester(httpClient);
                    var config    = Configuration.Default.WithRequester(requester)
                                    .WithDefaultLoader(new LoaderOptions {
                        IsResourceLoadingEnabled = true
                    }).WithJs();

                    var context  = BrowsingContext.New(config);
                    var document = await context.OpenAsync("https://www.tuenvio.cu/stores.json").WaitUntilAvailable();

                    var content = document.Body.TextContent;
                    if (!string.IsNullOrWhiteSpace(content))
                    {
                        var parametersMatch = RegexCall.Match(content);
                        if (parametersMatch.Success)
                        {
                            var cookieName = parametersMatch.Groups[1].Value.Trim();

                            var toNumbersACall = RegexA.Match(content).Groups[1].Value;
                            var toNumbersBCall = RegexB.Match(content).Groups[1].Value;
                            var toNumbersCCall = RegexC.Match(content).Groups[1].Value;

                            var parameters = parametersMatch.Groups[2].Value;
                            parameters = parameters.Replace("a", "%A%").Replace("b", "%B%").Replace("c", "%C%");
                            parameters = parameters.Replace("%A%", toNumbersACall).Replace("%B%", toNumbersBCall)
                                         .Replace("%C%", toNumbersCCall);

                            // Review: looks like the WaitUntilAvailable method is not working properly.
                            var cookieValue = string.Empty;
                            while (string.IsNullOrWhiteSpace(cookieValue))
                            {
                                try
                                {
                                    cookieValue = document.ExecuteScript($"toHex(slowAES.decrypt({parameters}))")
                                                  .ToString();
                                }
                                catch (Exception e)
                                {
                                    Log.Warning(e, "Error retrieving the global cookie");

                                    await Task.Delay(100);
                                }
                            }

                            AntiScrappingCookie = new Cookie(cookieName, cookieValue, "/", "www.tuenvio.cu");
                        }
                    }
                }
                catch (Exception e)
                {
                    Log.Warning(e, "Error evaluating the anti-scrapping cookie.");
                }
            }

            SemaphoreSlim.Release();

            var cookie = collection.FirstOrDefault(c => c.Name == AntiScrappingCookie.Name);

            if (cookie != null)
            {
                collection.Remove(cookie);
            }

            collection.Add(AntiScrappingCookie);

            return(collection);
        }
コード例 #7
0
        static async Task Test()
        {
            try
            {
                WebProxy     WP      = new WebProxy("61.183.233.6", 54896);
                ICredentials jxCredt = new NetworkCredential("proxy_username", "proxy_password");
                WP.Credentials = jxCredt;
                string requestUrl = "http://csinvoice.bsgoal.net.cn/home/about";
                var    u          = new Uri(requestUrl);
                var    webreq     = HttpWebRequest.Create(u);
                webreq.Proxy = WP;//将代理赋值给HttpWebRequest的Proxy属性
                var p = await webreq.GetResponseAsync();



                //HttpHost proxy = new HttpHost("你的代理的IP", 8080, "http");
                var html = p.ResponseUri.ToString();
                using (var reader = new StreamReader(p.GetResponseStream()))
                {
                    string data = await reader.ReadToEndAsync();
                }
                string proxyUri = string.Format("{0}:{1}", "58.53.128.83", "3128");

                NetworkCredential proxyCreds = new NetworkCredential(
                    "xxxx",
                    "xxxx"
                    );

                WebProxy proxy = new WebProxy(proxyUri, false)
                {
                    UseDefaultCredentials = false,
                    Credentials           = proxyCreds,
                };


                var cookieContainer = new CookieContainer();
                var handler         = new HttpClientHandler()
                {
                    Proxy                 = proxy,
                    PreAuthenticate       = true,
                    UseDefaultCredentials = false,
                    CookieContainer       = cookieContainer
                };



                var httpClient = new HttpClient(handler);
                //var result =await client.GetAsync(requestUrl);
                string e = string.Empty;
                using (HttpResponseMessage response = await httpClient.GetAsync(requestUrl))
                {
                    e = await response.Content.ReadAsStringAsync();
                }
                //httpClient.h
                //httpClient.DefaultRequestHeaders.Add("X-Forwarded-For", "162.150.10.16");
                //httpClient.
                var Requester     = new HttpClientRequester(httpClient);
                var Configuration = AngleSharp.Configuration.Default.WithDefaultLoader(setup =>
                {
                    setup.IsResourceLoadingEnabled = true;
                }, requesters: new[] { Requester }).WithJavaScript().WithCss();


                var config = Configuration.Default.WithDefaultLoader();
            }
            catch (Exception ex)
            {
            }
        }
コード例 #8
0
        public async Task EndToEnd()
        {
            // ARRANGE
            var httpClient = new HttpClient();
            var requester = new HttpClientRequester(httpClient);
            var configuration = new Configuration(new[] { new LoaderService(new[] { requester }) });
            var context = BrowsingContext.New(configuration);
            var request = DocumentRequest.Get(Url.Create("http://httpbin.org/html"));

            // ACT
            var response = await context.Loader.LoadAsync(request, CancellationToken.None);
            var document = await context.OpenAsync(response, CancellationToken.None);

            // ASSERT
            document.QuerySelector("h1").ToHtml().Should().Be("<h1>Herman Melville - Moby-Dick</h1>");
        }
コード例 #9
0
        public async Task EndToEnd()
        {
            if (Helper.IsNetworkAvailable())
            {
                // ARRANGE
                var httpClient = new HttpClient();
                var requester = new HttpClientRequester(httpClient);
                var configuration = Configuration.Default.WithDefaultLoader(requesters: new[] { requester });
                var context = BrowsingContext.New(configuration);
                var request = DocumentRequest.Get(Url.Create("http://httpbin.org/html"));

                // ACT
                var response = await context.Loader.DownloadAsync(request).Task;
                var document = await context.OpenAsync(response, CancellationToken.None);

                // ASSERT
                document.QuerySelector("h1").ToHtml().Should().Be("<h1>Herman Melville - Moby-Dick</h1>");
            }
        }
コード例 #10
0
        /// <summary>
        /// Create a new <see cref="FaucetPayClient"/> with the default requester.
        /// </summary>
        /// <remarks>
        /// The default <see cref="HttpClient"/> should be disposed using <see cref="Dispose"/>,
        /// but a custom <see cref="HttpClient"/> is not disposed, even within <see cref="Dispose"/>.
        /// </remarks>
        /// <param name="config">The configuration used for the client</param>
        /// <param name="client">
        ///     A <see cref="HttpClient"/> used for requests, when set to null, a new instance will be used.
        /// </param>
        /// <returns>A <see cref="FaucetPayClient"/> instance.</returns>
        public static FaucetPayClient Create(ApiConfig config, HttpClient client = null)
        {
            var requester = HttpClientRequester.Create(config, client);

            return(new FaucetPayClient(requester));
        }
コード例 #11
0
        private async Task <Cookie> ReadAntiScrappingCookieAsync()
        {
            Cookie antiScrappingCookie = null;

            Log.Information("Initializing Anti-Scrapping Cookie.");
            try
            {
                var httpClient = new HttpClient {
                    Timeout = TimeSpan.FromSeconds(60)
                };
                httpClient.DefaultRequestHeaders.CacheControl = new CacheControlHeaderValue {
                    NoCache = true
                };

                httpClient.DefaultRequestHeaders.TryAddWithoutValidation(
                    "user-agent",
                    ScraperConfigurations.GetSupportedAgent());

                var requester = new HttpClientRequester(httpClient);
                var config    = Configuration.Default.WithRequester(requester)
                                .WithDefaultLoader(new LoaderOptions {
                    IsResourceLoadingEnabled = true
                }).WithJs();

                var context  = BrowsingContext.New(config);
                var document = await context.OpenAsync(ScraperConfigurations.StoresJsonUrl).WaitUntilAvailable();

                var content = document.Body.TextContent;
                var match   = Regex.Match(content, @"Server\sError\s+406");
                if (!match.Success && !string.IsNullOrWhiteSpace(content))
                {
                    var parametersMatch = this.RegexCall.Match(content);
                    if (parametersMatch.Success)
                    {
                        var cookieName = parametersMatch.Groups[1].Value.Trim();

                        var toNumbersACall = this.RegexA.Match(content).Groups[1].Value;
                        var toNumbersBCall = this.RegexB.Match(content).Groups[1].Value;
                        var toNumbersCCall = this.RegexC.Match(content).Groups[1].Value;

                        var parameters = parametersMatch.Groups[2].Value;
                        parameters = parameters.Replace("a", "%A%").Replace("b", "%B%").Replace("c", "%C%");
                        parameters = parameters.Replace("%A%", toNumbersACall).Replace("%B%", toNumbersBCall)
                                     .Replace("%C%", toNumbersCCall);

                        // Review: looks like the WaitUntilAvailable method is not working properly.
                        var cookieValue = string.Empty;
                        while (string.IsNullOrWhiteSpace(cookieValue))
                        {
                            try
                            {
                                cookieValue = document.ExecuteScript($"toHex(slowAES.decrypt({parameters}))")
                                              .ToString();
                            }
                            catch (Exception e)
                            {
                                Log.Warning(e, "Error retrieving the Anti-Scrapping cookie.");

                                await Task.Delay(100);
                            }
                        }

                        Log.Information(
                            "Read cookie '{CookieName}' with value '{CookieValue}'.",
                            cookieName,
                            cookieValue);

                        antiScrappingCookie = new Cookie(cookieName, cookieValue, "/", "www.tuenvio.cu");
                    }
                }
            }
            catch (Exception e)
            {
                Log.Warning(e, "Error evaluating the Anti-Scrapping cookie.");
            }

            return(antiScrappingCookie);
        }