コード例 #1
0
        public void TestUrlModification()
        {
            IHttpUrl url;

            // Test the odd preservation of the question mark
            Assert.AreEqual("http://example.com/foo?", new HttpUrl("example.com", "/foo?").ToFull());
            Assert.AreEqual("http://example.com/foo", new HttpUrl("example.com", "/foo?").WithoutQuery("blah").ToFull()); // dubious: could keep the question mark if there was no such query name
            Assert.AreEqual("http://example.com/foo", new HttpUrl("example.com", "/foo").WithQuery("blah", "s").WithoutQuery("blah").ToFull());
            Assert.AreEqual("http://example.com/foo", new HttpUrl("example.com", "/foo?").WithQuery("blah", "s").WithoutQuery("blah").ToFull());

            // WithQuery Single + Blank URL
            url = new HttpUrl("example.com", "/foo").WithQuery("blah", "thingy");
            Assert.IsTrue(url.HasQuery);
            Assert.AreEqual("http://example.com/foo?blah=thingy", url.ToFull());

            url = new HttpUrl("example.com", "/foo").WithQuery("blah", (string) null);
            Assert.IsFalse(url.HasQuery);
            Assert.AreEqual("http://example.com/foo", url.ToFull());

            // Query string key without value
            url = new HttpUrl("localhost", "/blah/thingy?dl");
            Assert.IsTrue(url.Query.Any(kvp => kvp.Key == "dl" && kvp.Value == ""));
            url = new HttpUrl("localhost", "/blah/thingy?dl=");
            Assert.IsTrue(url.Query.Any(kvp => kvp.Key == "dl" && kvp.Value == ""));
            url = new HttpUrl("localhost", "/blah/thingy?dl&blah=5");
            Assert.IsTrue(url.Query.Any(kvp => kvp.Key == "dl" && kvp.Value == ""));
            Assert.IsTrue(url.Query.Any(kvp => kvp.Key == "blah" && kvp.Value == "5"));
            url = new HttpUrl("localhost", "/blah/thingy?dl=&blah=5");
            Assert.IsTrue(url.Query.Any(kvp => kvp.Key == "dl" && kvp.Value == ""));
            Assert.IsTrue(url.Query.Any(kvp => kvp.Key == "blah" && kvp.Value == "5"));
            url = new HttpUrl("localhost", "/blah/thingy?blah=5&dl");
            Assert.IsTrue(url.Query.Any(kvp => kvp.Key == "dl" && kvp.Value == ""));
            Assert.IsTrue(url.Query.Any(kvp => kvp.Key == "blah" && kvp.Value == "5"));
            url = new HttpUrl("localhost", "/blah/thingy?blah=5&dl=");
            Assert.IsTrue(url.Query.Any(kvp => kvp.Key == "dl" && kvp.Value == ""));
            Assert.IsTrue(url.Query.Any(kvp => kvp.Key == "blah" && kvp.Value == "5"));
            url = new HttpUrl("localhost", "/blah/thingy?blah=5&dl&");
            Assert.IsTrue(url.Query.Any(kvp => kvp.Key == "dl" && kvp.Value == ""));
            Assert.IsTrue(url.Query.Any(kvp => kvp.Key == "blah" && kvp.Value == "5"));

            // WithQuery Single + one other argument
            url = new HttpUrl("example.com", "/foo?q=s").WithQuery("blah", "thingy");
            Assert.IsTrue(url.HasQuery);
            Assert.AreEqual("http://example.com/foo?q=s&blah=thingy", url.ToFull());

            url = new HttpUrl("example.com", "/foo?q=s").WithQuery("blah", (string) null);
            Assert.IsTrue(url.HasQuery);
            Assert.AreEqual("http://example.com/foo?q=s", url.ToFull());

            // WithQuery Single + just the same argument
            url = new HttpUrl("example.com", "/foo?blah=s").WithQuery("blah", "thingy");
            Assert.IsTrue(url.HasQuery);
            Assert.AreEqual("http://example.com/foo?blah=thingy", url.ToFull());

            url = new HttpUrl("example.com", "/foo?blah=s").WithQuery("blah", (string) null);
            Assert.IsFalse(url.HasQuery);
            Assert.AreEqual("http://example.com/foo", url.ToFull());
        }
コード例 #2
0
        public void TestSTS(string secretId, string secretKey, string policy)
        {
            string camHost   = "sts.api.qcloud.com";
            string camPath   = "/v2/index.php";
            string camMethod = "GET";
            bool   isHttps   = true;
            Dictionary <string, string> queryParameters = new Dictionary <string, string>();

            queryParameters.Add("policy", policy);
            queryParameters.Add("name", "brady");
            queryParameters.Add("Action", "GetFederationToken");
            queryParameters.Add("SecretId", secretId);
            queryParameters.Add("Nonce", new Random().Next(1, int.MaxValue).ToString());
            long time = TimeUtils.GetCurrentTime(TimeUnit.SECONDS);

            queryParameters.Add("Timestamp", time.ToString());
            queryParameters.Add("RequestClient", "net-sdk-v5");
            queryParameters.Add("durationSeconds", 7200.ToString());
            string plainText = MakeSignPlainText(queryParameters, camMethod, camHost, camPath);
            string hamcSha1  = DigestUtils.GetHamcSha1ToBase64(plainText, Encoding.UTF8, secretKey, Encoding.UTF8);

            queryParameters.Add("Signature", hamcSha1);

            HttpUrl httpUrl = new HttpUrl();

            httpUrl.Scheme = isHttps ? "https" : "http";
            httpUrl.Host   = camHost;
            httpUrl.Path   = camPath;
            Dictionary <string, string> tmp = new Dictionary <string, string>(queryParameters.Count);

            foreach (KeyValuePair <string, string> pair in queryParameters)
            {
                tmp.Add(pair.Key, URLEncodeUtils.Encode(pair.Value).Replace("%20", "+"));
            }
            queryParameters.Clear();
            httpUrl.SetQueryParameters(tmp);

            SetSTSRequest(camMethod, isHttps, httpUrl);
        }
コード例 #3
0
        internal static string MakeUri(ParameterInfo parameter, HttpUrl baseUrl, OperationInfo <Verb> operation)
        {
            string result = baseUrl.ToString();

            foreach (var argument in operation.Arguments)
            {
                var argumentSource = argument.Source;
                if (!(argumentSource is FromUrlAttribute))
                {
                    continue;
                }

                var url = ((FromUrlAttribute)argumentSource).UrlTemplate.Replace(FromUrlAttribute.Key, "/" + argument.Parameter.Name + "/").TrimStart('/');
                result += (result.EndsWith("/") ? String.Empty : "/") + url;
                if (argument.Parameter == parameter)
                {
                    break;
                }
            }

            return(result);
        }
コード例 #4
0
ファイル: PathFinder.cs プロジェクト: striller/PentestBro
        public IList <HttpUrl> Find(HttpUrl sourcehttpUrl, List <string> errorStrings)
        {
            var httpUrls = new List <HttpUrl>();

            foreach (var filePath in this.dictionaryFilePaths)
            {
                var    file = new StreamReader(filePath);
                string relativeFilePath;

                while ((relativeFilePath = file.ReadLine()) != null)
                {
                    var httpUrl  = UrlParser.GetHttpUrl(sourcehttpUrl, "/" + relativeFilePath);
                    var response = this.browser.LoadWebsite(httpUrl.FullUrl, errorStrings);

                    if (response.IsSuccessStatusCode)
                    {
                        httpUrls.Add(httpUrl);
                    }
                }
            }

            return(httpUrls);
        }
コード例 #5
0
        public HttpUrlView(HttpUrl httpUrl, DataSource dataSource)
        {
            this.dataSource = dataSource;
            this.httpUrl    = httpUrl;

            InitializeComponent();

            builder = new DetailPageDataBuilder();
            builder.Build("监控名称", httpUrl.Description);
            builder.Build("监控链接", httpUrl.Url);
            builder.Build("请求方法", httpUrl.Method);
            builder.Build("请求延时", httpUrl.Delay + " ms");

            var noticeTargetTask = Common.GetNoticeTargetNamesAsync(dataSource, httpUrl.NoticeTarget);
            var statusTask       = Common.GetStatusAsync(delegate {
                return(dataSource.GetUrlStatus());
            }, httpUrl.ID);

            builder.Build("通知人员", noticeTargetTask.Result);
            builder.Build("状态", statusTask.Result);
            builder.Build("访问源", dataSource.ListenServerItem.Host);
            ContentList.DataContext = builder.DataSource;
        }
コード例 #6
0
        private static IEnumerable <Cookie> DecodeHeader(HttpUrl httpUrl, string header)
        {
            var result = new List <Cookie>();
            var limit  = header.Length;
            int pairEnd;

            for (var pos = 0; pos < limit; pos = pairEnd + 1)
            {
                pairEnd = DelimiterOffset(header, pos, limit, ";,");
                var equalsSign = DelimiterOffset(header, pos, pairEnd, "=");
                var name       = TrimSubstring(header, pos, equalsSign);
                if (name.StartsWith("$"))
                {
                    continue;
                }

                // We have either name=value or just a name.
                var value = equalsSign < pairEnd?TrimSubstring(header, equalsSign + 1, pairEnd) : "";

                result.Add(new Cookie.Builder().Name(name).Value(value).Domain(httpUrl.Host()).Build());
            }
            return(result);
        }
コード例 #7
0
        private static void CreateProxy(string targetDirectory, HttpUrl url)
        {
            var namedGraphSelector = _container.Resolve <INamedGraphSelector>() as ILocallyControlledNamedGraphSelector;

            if (namedGraphSelector != null)
            {
                namedGraphSelector.NamedGraph = (Uri)url;
            }

            var apiDocumentation = GetApiDocumentation(url);

            if (apiDocumentation == null)
            {
                throw new InvalidOperationException(String.Format("No API documentation found at '{0}'.", url));
            }

            if (apiDocumentation.SupportedClasses.Count == 0)
            {
                throw new InvalidOperationException(String.Format("No supported classes found at '{0}'.", url));
            }

            var generator        = _container.Resolve <IClassGenerator>();
            var supportedClasses = from supportedClass in apiDocumentation.SupportedClasses
                                   where supportedClass.Id.ToString() != EntityConverter.Hydra + "ApiDocumentation"
                                   from @class in generator.CreateCode(supportedClass)
                                   select @class;

            foreach (var @class in supportedClasses)
            {
                File.WriteAllText(Path.Combine(targetDirectory, @class.Key), @class.Value);
            }

            if (namedGraphSelector != null)
            {
                namedGraphSelector.NamedGraph = null;
            }
        }
コード例 #8
0
        public override string GetVideoUrl(VideoInfo video)
        {
            string          cid      = "cid=" + video.Other.ToString();
            var             p1       = GetWebData <JObject>(video.VideoUrl, cid);
            CookieContainer cc       = new CookieContainer();
            string          postData = "url=" + HttpUtility.UrlEncode(p1.Value <string>("url"));
            string          webData  = GetWebData(@"http://www.telewizjada.net/set_cookie.php", postData, cc);
            var             jData    = GetWebData <JObject>(@"http://www.telewizjada.net/get_channel_url.php", cid, cc);
            var             webData2 = jData.Value <string>("url");
            string          m3u      = GetWebData(webData2, null, cc);
            Match           m        = Regex.Match(m3u, @"(?<ch>chu.*)");

            if (m.Success)
            {
                HttpUrl httpUrl = new HttpUrl(FormatDecodeAbsolutifyUrl(webData2, m.Groups["ch"].Value, "{0}", UrlDecoding.None));
                httpUrl.LiveStream = true;
                foreach (Cookie cookie in cc.GetCookies(new Uri(@"http://www.telewizjada.net")))
                {
                    httpUrl.Cookies.Add(cookie);
                }
                return(httpUrl.ToString());
            }
            return(String.Empty);
        }
コード例 #9
0
        public override string GetVideoUrl(string url)
        {
            string webData = WebCache.Instance.GetWebData(url);

            webData = GetFromPost(url, webData);
            if (!string.IsNullOrEmpty(webData))
            {
                string packed = null;
                int    i      = webData.LastIndexOf(@"return p}");
                if (i >= 0)
                {
                    int j = webData.IndexOf(@"</script>", i);
                    if (j >= 0)
                    {
                        packed = webData.Substring(i + 9, j - i - 9);
                    }
                }
                if (!String.IsNullOrEmpty(packed))
                {
                    packed = packed.Replace(@"\'", @"'");
                    string unpacked = Helpers.StringUtils.UnPack(packed);
                    return(Helpers.StringUtils.GetSubString(unpacked, @"name=""src""value=""", @""""));
                }
                return(String.Empty);
            }

            Match m = Regex.Match(webData, @"var\slnk1\s=\s'(?<url>[^']*)'");

            if (m.Success)
            {
                HttpUrl httpUrl = new HttpUrl(m.Groups["url"].Value);
                httpUrl.UserAgent = OnlineVideoSettings.Instance.UserAgent;
                return(httpUrl.ToString());
            }
            return(String.Empty);
        }
コード例 #10
0
ファイル: WebsiteScanner.cs プロジェクト: striller/PentestBro
 private void RecursiveScan(HttpUrl httpUrl, ScanResult scanResult)
 {
     this.RecursiveScan(httpUrl, new[] { httpUrl.Host }, scanResult);
 }
コード例 #11
0
ファイル: WebsiteScanner.cs プロジェクト: striller/PentestBro
        public void Scan(HttpUrl httpUrl, IList <string> targetHosts)
        {
            var scanResult = new ScanResult();

            this.RecursiveScan(httpUrl, targetHosts, scanResult);
        }
コード例 #12
0
ファイル: WebsiteScanner.cs プロジェクト: striller/PentestBro
        public void Scan(HttpUrl httpUrl)
        {
            var scanResult = new ScanResult();

            this.RecursiveScan(httpUrl, new[] { httpUrl.Host }, scanResult);
        }
コード例 #13
0
 public void Teardown()
 {
     _url = null;
 }
コード例 #14
0
        public void should_give_same_instance_if_no_fragments_are_given()
        {
            var expected = new HttpUrl(true, "http://temp.uri/", "http", "temp.uri", 80, "/", null, null);

            expected.WithFragment(null).Should().BeSameAs(expected);
        }
コード例 #15
0
        public override string GetVideoUrl(string url)
        {
            CookieContainer cc = new CookieContainer();

            if (url.Contains("embed") || url.Contains(@"/f/"))
            {
                string page = WebCache.Instance.GetWebData(url);
                if (!string.IsNullOrEmpty(page))
                {
                    Match n = Regex.Match(page, @"file:\s'(?<url>[^']*)'");
                    if (n.Success)
                    {
                        HttpUrl httpurl = new HttpUrl(n.Groups["url"].Value);
                        httpurl.UserAgent = @"Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko";
                        return(httpurl.ToString());
                    }
                }
            }
            else
            {
                string page = WebCache.Instance.GetWebData(url, cookies: cc);

                if (!string.IsNullOrEmpty(page))
                {
                    string op          = Regex.Match(page, @"<input\stype=""hidden""\sname=""op""\svalue=""(?<value>[^""]+)"">").Groups["value"].Value;
                    string id          = Regex.Match(page, @"<input\stype=""hidden""\sname=""id""\svalue=""(?<value>[^""]+)"">").Groups["value"].Value;
                    string rand        = Regex.Match(page, @"<input\stype=""hidden""\sname=""rand""\svalue=""(?<value>[^""]+)"">").Groups["value"].Value;
                    string referer     = Regex.Match(page, @"<input\stype=""hidden""\sname=""referer""\svalue=""(?<value>[^""]+)"">").Groups["value"].Value;
                    string method_free = Regex.Match(page, @"<input\stype=""submit""\sname=""method_free""\svalue=""(?<value>[^""]+)"">").Groups["value"].Value;
                    //string method_premium = Regex.Match(page, @"<input\stype=""submit""\sname=""method_premium""\svalue=""(?<value>[^""]+)"">").Groups["value"].Value;

                    //string timeToWait = Regex.Match(page, @"<span\sid=""countdown_str"">[^>]*>[^>]*>[^>]*>(?<time>[^<]+)</span>").Groups["time"].Value;
                    //if (Convert.ToInt32(timeToWait) < 10)
                    {
                        string postdata = "op=" + op +
                                          "&id=" + id +
                                          "&rand=" + rand +
                                          "&referer=" + referer +
                                          "&method_free=" + HttpUtility.UrlEncode(method_free) +
                                          //"&method_premium=" + method_premium +
                                          "&down_direct=1";

                        //System.Threading.Thread.Sleep(Convert.ToInt32(timeToWait) * 1001);

                        string page2 = WebCache.Instance.GetWebData(url, postdata, cc, url);

                        if (!string.IsNullOrEmpty(page2))
                        {
                            string packed = null;
                            int    i      = page2.LastIndexOf(@"return p}");
                            if (i >= 0)
                            {
                                int j = page2.IndexOf(@"</script>", i);
                                if (j >= 0)
                                {
                                    packed = page2.Substring(i + 9, j - i - 9);
                                }
                            }
                            string resUrl;
                            if (!String.IsNullOrEmpty(packed))
                            {
                                packed = packed.Replace(@"\'", @"'");
                                string unpacked = Helpers.StringUtils.UnPack(packed);
                                string res      = Helpers.StringUtils.GetSubString(unpacked, @"'file','", @"'");
                                if (!String.IsNullOrEmpty(res))
                                {
                                    resUrl = res;
                                }
                                else
                                {
                                    resUrl = Helpers.StringUtils.GetSubString(unpacked, @"name=""src""value=""", @"""");
                                }
                            }
                            else
                            {
                                resUrl = Helpers.StringUtils.GetSubString(page2, @"addVariable('file','", @"'");
                            }
                            resUrl = resUrl.Replace("[", "%5b").Replace("]", "%5d");
                            return(resUrl);
                        }
                    }
                }
            }
            return(String.Empty);
        }
コード例 #16
0
        internal void Apply(HttpUrl httpUrl)
        {
            base.Apply(httpUrl);

            httpUrl.OpenConnectionSleepTime = this.OpenConnectionSleepTime;
            httpUrl.OpenConnectionTimeout = this.OpenConnectionTimeout;
            httpUrl.TotalReopenConnectionTimeout = this.TotalReopenConnectionTimeout;

            httpUrl.ServerAuthenticate = this.ServerAuthenticate;
            httpUrl.ServerUserName = this.ServerUserName;
            httpUrl.ServerPassword = this.ServerPassword;

            httpUrl.ProxyServerAuthenticate = this.ProxyServerAuthenticate;
            httpUrl.ProxyServer = this.ProxyServer;
            httpUrl.ProxyServerPort = this.ProxyServerPort;
            httpUrl.ProxyServerUserName = this.ProxyServerUserName;
            httpUrl.ProxyServerPassword = this.ProxyServerPassword;
            httpUrl.ProxyServerType = this.ProxyServerType;
        }
コード例 #17
0
        internal void Apply(HttpUrl httpUrl)
        {
            base.Apply(httpUrl);

            httpUrl.OpenConnectionSleepTime = OpenConnectionSleepTime;
            httpUrl.OpenConnectionTimeout = OpenConnectionTimeout;
            httpUrl.TotalReopenConnectionTimeout = TotalReopenConnectionTimeout;
        }
コード例 #18
0
 public WebScanItemDisplay(HttpUrl httpUrl)
 {
     this.HttpUrl = httpUrl;
 }
コード例 #19
0
 public PersonClient(HttpUrl baseUri, string authenticationScheme) : base(baseUri, authenticationScheme)
 {
 }
コード例 #20
0
 public ProductClient(HttpUrl baseUri) : base(baseUri)
 {
 }
コード例 #21
0
 public TypeClient(HttpUrl baseUri) : base(baseUri)
 {
 }
コード例 #22
0
ファイル: WebsiteScanner.cs プロジェクト: striller/PentestBro
        private void RecursiveScan(HttpUrl httpUrl, IList <string> targetHosts, ScanResult scanResult)
        {
            if (targetHosts.Any(x => httpUrl.Host.EndsWith(x)) == false)
            {
                return;
            }

            lock (this.httpUrlLock)
            {
                var storedHttpUrl = scanResult.GetHttpUrls().SingleOrDefault(x => x.Equals(httpUrl));

                if (storedHttpUrl != null)
                {
                    this.AddQueryString(httpUrl, storedHttpUrl.QueryString);
                    return;
                }

                scanResult.AddHttpUrl(httpUrl);
            }

            Console.WriteLine($"Scanning URL {httpUrl.FullUrl}");

            var node = this.GetDocumentNode(httpUrl);

            if (node.OuterLength <= 0)
            {
                return;
            }

            var content = node.OuterHtml;
            var hrefs   = node.GetHrefs();

            scanResult.AddComments(httpUrl, node.GetComments());

            Parallel.ForEach(hrefs, href =>
            {
                var hrefType = UrlParser.GetHrefType(href);

                switch (hrefType)
                {
                case HrefType.Anchor:
                    break;

                case HrefType.BrowserUrl:
                    scanResult.AddBrowserUrl(httpUrl, href);
                    break;

                case HrefType.DataUrl:
                    scanResult.AddDataUrl(httpUrl, href);
                    break;

                case HrefType.FtpUrl:
                    var host     = UrlParser.GetHostFromUrl(href);
                    var path     = UrlParser.GetPathFromUrl(href);
                    var fileName = UrlParser.GetFileNameFromUrl(href);
                    scanResult.AddFtpUrl(httpUrl, new FtpUrl(host, path, fileName));
                    break;

                case HrefType.Javascript:
                    scanResult.AddJavascriptUrl(httpUrl, href);
                    break;

                case HrefType.MailAddress:
                    scanResult.AddMailAddress(httpUrl, href);
                    break;

                case HrefType.UnknownUrl:
                    scanResult.AddUnkownUrl(httpUrl, href);
                    break;
                }

                if (hrefType == HrefType.FullUrl)
                {
                    var url = UrlParser.GetHttpUrl(href);
                    this.RecursiveScan(url, targetHosts, scanResult);
                }
                else if (hrefType == HrefType.RelativePath)
                {
                    var url = UrlParser.GetHttpUrl(httpUrl, href);
                    this.RecursiveScan(url, targetHosts, scanResult);
                }
            });
        }
コード例 #23
0
        private void AddWebScan(HttpUrl suggestedHttpUrl)
        {
            var selectedTargetDisplay = this.SelectedTargetDisplay;

            if (suggestedHttpUrl == null)
            {
                suggestedHttpUrl = HttpUrl.Default;
            }

            var isAcknowledged     = false;
            var isInvalidUrl       = false;
            var webScanItemDisplay = new WebScanItemDisplay(suggestedHttpUrl);

            do
            {
                var webScanDialog       = new WebScanDialog(suggestedHttpUrl);
                var webScanDialogResult = webScanDialog.ShowDialog();
                var domain   = webScanDialog.DomainText;
                var port     = webScanDialog.PortText;
                var useHttps = webScanDialog.UseHttpsCheck.HasValue && webScanDialog.UseHttpsCheck.Value;

                if (webScanDialogResult.HasValue && webScanDialogResult.Value)
                {
                    var host    = port == string.Empty ? domain : $"{domain}:{port}";
                    var httpUrl = new HttpUrl(host, string.Empty, string.Empty, useHttps);
                    webScanItemDisplay = new WebScanItemDisplay(httpUrl);

                    if (selectedTargetDisplay.WebScanItemDisplays.Any(x => x.HttpUrl.FullUrl == httpUrl.FullUrl))
                    {
                        return;
                    }

                    if (this.browser.LoadHeader(httpUrl.FullUrl).IsSuccessStatusCode)
                    {
                        foreach (var errorContentString in this.HandleHttpHeaderCompliance(webScanItemDisplay.HttpUrl))
                        {
                            webScanItemDisplay.ErrorContentStrings.Add(errorContentString);
                        }

                        isInvalidUrl = false;
                    }
                    else
                    {
                        isInvalidUrl = true;
                    }
                }

                isAcknowledged = webScanDialogResult.HasValue && webScanDialogResult.Value;
            } while (isAcknowledged && isInvalidUrl);

            if (isAcknowledged)
            {
                this.RunTask((uiThread) =>
                {
                    uiThread.Execute(() =>
                    {
                        selectedTargetDisplay.WebScanItemDisplays.Add(webScanItemDisplay);
                        selectedTargetDisplay.SelectedWebScanItemDisplay = webScanItemDisplay;
                    });
                });
            }
        }
コード例 #24
0
 public RobotsResult(RobotsType type, HttpUrl httpUrl)
 {
     this.Type    = type;
     this.HttpUrl = httpUrl;
 }
コード例 #25
0
        public void TestNestedResolve()
        {
            var url = new HttpUrl();

            url.SetHost("www.example.com");
            url.SetLocation("/docgen/member/Color/ToString?thingy=stuff");
            url.AssertComplete();

            Assert.AreEqual(0, url.ParentDomains.Length);
            Assert.AreEqual("www.example.com", url.Domain);

            Assert.AreEqual("/docgen/member/Color/ToString", url.Path);
            Assert.IsTrue(url.ParentPaths.SequenceEqual(new string[0]));

            bool okProp = false, okDocGen = false;

            var resolverDocGen = new UrlResolver(
                new UrlMapping(path: "/member", handler: req =>
            {
                Assert.AreEqual("/Color/ToString", req.Url.Path);
                Assert.AreEqual("/docgen/member/blah/xyz?thingy=stuff", req.Url.WithPath("/blah/xyz").ToHref());

                var url2 = req.Url.WithPathOnly("/blah/xyz");
                Assert.AreEqual("/docgen/member/blah/xyz", url2.ToHref());
                Assert.AreEqual("/blah/xyz", url2.Path);
                Assert.AreEqual("http://www.example.com/docgen/member/blah/xyz", url2.ToFull());

                url2 = req.Url.WithPath("/blah/xyz");
                Assert.AreEqual("/docgen/member/blah/xyz?thingy=stuff", url2.ToHref());
                Assert.AreEqual("/blah/xyz", url2.Path);

                url2 = req.Url.WithPathParent().WithPath("/blah/xyz");
                Assert.AreEqual("/docgen/blah/xyz?thingy=stuff", url2.ToHref());
                Assert.AreEqual("/blah/xyz", url2.Path);

                url2 = req.Url.WithPathParent().WithPathParent().WithPath("/blah/xyz");
                Assert.AreEqual("/blah/xyz?thingy=stuff", url2.ToHref());
                Assert.AreEqual("/blah/xyz", url2.Path);

                okDocGen = true;
                return(HttpResponse.Empty());
            })
                );

            var resolverPropeller = new UrlResolver(
                new UrlMapping(path: "/docgen", handler: req =>
            {
                Assert.AreEqual("/member/Color/ToString", req.Url.Path);
                Assert.AreEqual("/docgen/blah/xyz?thingy=stuff", req.Url.WithPath("/blah/xyz").ToHref());

                var url2 = req.Url.WithPathOnly("/blah/xyz");
                Assert.AreEqual("/docgen/blah/xyz", url2.ToHref());
                Assert.AreEqual("/blah/xyz", url2.Path);
                Assert.AreEqual("http://www.example.com/docgen/blah/xyz", url2.ToFull());

                url2 = req.Url.WithPath("/blah/xyz");
                Assert.AreEqual("/docgen/blah/xyz?thingy=stuff", url2.ToHref());
                Assert.AreEqual("/blah/xyz", url2.Path);

                url2 = req.Url.WithPathParent().WithPath("/blah/xyz");
                Assert.AreEqual("/blah/xyz?thingy=stuff", url2.ToHref());
                Assert.AreEqual("/blah/xyz", url2.Path);

                okProp = true;
                return(resolverDocGen.Handle(req));
            })
                );

            resolverPropeller.Handle(new HttpRequest()
            {
                Url = url
            });

            Assert.IsTrue(okProp);
            Assert.IsTrue(okDocGen);
        }
コード例 #26
0
 public PersonClient(HttpUrl baseUri) : base(baseUri)
 {
 }
コード例 #27
0
        private object TransformCollection(object result, HttpUrl requestUri, int totalItems, int skip, int take)
        {
            var entityContext = _entityContextProvider.EntityContext;
            var collection = entityContext.Load<ICollection>((Uri)requestUri);
            collection.TotalItems = totalItems;
            collection.Members.Clear();
            foreach (IEntity entity in (IEnumerable)result)
            {
                collection.Members.Add(entity.AsEntity<IResource>());
            }

            if ((skip <= 0) && (take <= 0))
            {
                entityContext.Commit();
                return result;
            }

            var viewId = collection.Id.Uri.AddFragment("view");
            var view = entityContext.Load<IPartialCollectionView>(viewId);
            collection.View = view;
            view.ItemsPerPage = (take > 0 ? take : totalItems);
            entityContext.Commit();
            return result;
        }
コード例 #28
0
        public override string GetVideoUrl(VideoInfo video)
        {
            string resultUrl   = GetFormattedVideoUrl(video);
            string playListUrl = GetPlaylistUrl(resultUrl);

            if (String.IsNullOrEmpty(playListUrl))
            {
                return(String.Empty);
            }


            string data           = GetWebData(playListUrl);
            Match  m              = Regex.Match(data, @"defaultQuality: ""(?<default>[^""]+)"",");
            string defaultQuality = null;

            if (m.Success)
            {
                defaultQuality = m.Groups["default"].Value;
            }

            m = Regex.Match(data, @"qualities:\s\[(?<qualities>[^]]+)]");
            var    baseOptions = base.GetPlaybackOptions(playListUrl);
            string bareUrl     = baseOptions.Values.First();
            int    inspos      = bareUrl.IndexOf(".mp4");

            video.PlaybackOptions = new Dictionary <string, string>();
            if (m.Success)
            {
                string[] qualities = m.Groups["qualities"].Value.Split(',');
                foreach (string quality in qualities)
                {
                    var q = quality.Trim(new[] { '"', ' ' });
                    if (q == defaultQuality)
                    {
                        HttpUrl final = new HttpUrl(bareUrl);
                        final.Referer = playListUrl;
                        video.PlaybackOptions.Add(q, final.ToString());
                    }
                    else
                    if (!String.IsNullOrEmpty(q))
                    {
                        HttpUrl final = new HttpUrl(bareUrl.Insert(inspos, '-' + q));
                        final.Referer = playListUrl;
                        video.PlaybackOptions.Add(q, final.ToString());
                    }
                }
            }

            if (video.PlaybackOptions.Count == 0)
            {
                video.PlaybackOptions = null;
            }

            m = Regex.Match(data, @"kind:\s""subtitles"",\ssrclang:\s""(?<langcode>[^""]+)"",\slabel:\s""(?<langname>[^""]*)"",\ssrc:\s""(?<url>[^""]+)""\s}");
            Dictionary <string, string> subs = new Dictionary <string, string>();

            while (m.Success)
            {
                subs.Add(m.Groups["langcode"].Value, m.Groups["url"].Value);
                m = m.NextMatch();
            }

            string[] prefSubs = nativeSubtitleLanguages.Split(';');
            foreach (string prefSub in prefSubs)
            {
                if (subs.ContainsKey(prefSub) && !String.IsNullOrEmpty(subs[prefSub]))
                {
                    string subData = GetWebData(subs[prefSub]);
                    if (subData.StartsWith(@"WEBVTT"))
                    {
                        subData = Helpers.SubtitleUtils.Webvtt2SRT(subData);
                    }

                    video.SubtitleText = subData;
                    break;
                }
            }

            if (String.IsNullOrEmpty(video.SubtitleUrl))
            {
                sh.SetSubtitleText(video, this.GetTrackingInfo);
            }
            if (video.PlaybackOptions == null)
            {
                HttpUrl final = new HttpUrl(bareUrl);
                final.Referer = playListUrl;
                return(final.ToString());
            }
            return(video.PlaybackOptions.Values.Last());
        }
コード例 #29
0
        public void TestSkippableHandlers()
        {
            var url = new HttpUrl();
            url.SetHost("www.example.com");
            url.SetLocation("/docgen/member/Color/ToString?thingy=stuff");
            url.AssertComplete();

            Assert.AreEqual(0, url.ParentDomains.Length);
            Assert.AreEqual("www.example.com", url.Domain);

            var resolver = new UrlResolver(
                new UrlMapping(req =>
                {
                    Assert.AreEqual(1, req.Url.ParentDomains.Length);
                    Assert.AreEqual("www.example.com", req.Url.ParentDomains[0]);
                    Assert.AreEqual("", req.Url.Domain);
                    return null;
                }, "www.example.com", skippable: true),
                new UrlMapping(req =>
                {
                    Assert.AreEqual(1, req.Url.ParentDomains.Length);
                    Assert.AreEqual("example.com", req.Url.ParentDomains[0]);
                    Assert.AreEqual("www.", req.Url.Domain);
                    return null;
                }, "example.com", skippable: true),
                new UrlMapping(req =>
                {
                    Assert.AreEqual(0, req.Url.ParentDomains.Length);
                    Assert.AreEqual("www.example.com", req.Url.Domain);
                    return null;
                }, skippable: true),
                new UrlMapping(req =>
                {
                    Assert.AreEqual(0, req.Url.ParentDomains.Length);
                    Assert.AreEqual("www.example.com", req.Url.Domain);
                    return HttpResponse.PlainText("blah");
                }
            ));
            resolver.Handle(new HttpRequest { Url = url });
        }
コード例 #30
0
 /// <summary>Exposes the <see cref="System.Security.Policy.Url" /> assertions extension.</summary>
 /// <param name="url">The subject URL.</param>
 /// <returns>Assertions for a given <paramref name="url" />.</returns>
 public static HttpUrlAssertions Should(this HttpUrl url)
 {
     return(new HttpUrlAssertions(url));
 }
コード例 #31
0
        public void TestNestedResolve()
        {
            var url = new HttpUrl();
            url.SetHost("www.example.com");
            url.SetLocation("/docgen/member/Color/ToString?thingy=stuff");
            url.AssertComplete();

            Assert.AreEqual(0, url.ParentDomains.Length);
            Assert.AreEqual("www.example.com", url.Domain);

            Assert.AreEqual("/docgen/member/Color/ToString", url.Path);
            Assert.IsTrue(url.ParentPaths.SequenceEqual(new string[0]));

            bool okProp = false, okDocGen = false;

            var resolverDocGen = new UrlResolver(
                new UrlMapping(path: "/member", handler: req =>
                {
                    Assert.AreEqual("/Color/ToString", req.Url.Path);
                    Assert.AreEqual("/docgen/member/blah/xyz?thingy=stuff", req.Url.WithPath("/blah/xyz").ToHref());

                    var url2 = req.Url.WithPathOnly("/blah/xyz");
                    Assert.AreEqual("/docgen/member/blah/xyz", url2.ToHref());
                    Assert.AreEqual("/blah/xyz", url2.Path);
                    Assert.AreEqual("http://www.example.com/docgen/member/blah/xyz", url2.ToFull());

                    url2 = req.Url.WithPath("/blah/xyz");
                    Assert.AreEqual("/docgen/member/blah/xyz?thingy=stuff", url2.ToHref());
                    Assert.AreEqual("/blah/xyz", url2.Path);

                    url2 = req.Url.WithPathParent().WithPath("/blah/xyz");
                    Assert.AreEqual("/docgen/blah/xyz?thingy=stuff", url2.ToHref());
                    Assert.AreEqual("/blah/xyz", url2.Path);

                    url2 = req.Url.WithPathParent().WithPathParent().WithPath("/blah/xyz");
                    Assert.AreEqual("/blah/xyz?thingy=stuff", url2.ToHref());
                    Assert.AreEqual("/blah/xyz", url2.Path);

                    okDocGen = true;
                    return HttpResponse.Empty();
                })
            );

            var resolverPropeller = new UrlResolver(
                new UrlMapping(path: "/docgen", handler: req =>
                {
                    Assert.AreEqual("/member/Color/ToString", req.Url.Path);
                    Assert.AreEqual("/docgen/blah/xyz?thingy=stuff", req.Url.WithPath("/blah/xyz").ToHref());

                    var url2 = req.Url.WithPathOnly("/blah/xyz");
                    Assert.AreEqual("/docgen/blah/xyz", url2.ToHref());
                    Assert.AreEqual("/blah/xyz", url2.Path);
                    Assert.AreEqual("http://www.example.com/docgen/blah/xyz", url2.ToFull());

                    url2 = req.Url.WithPath("/blah/xyz");
                    Assert.AreEqual("/docgen/blah/xyz?thingy=stuff", url2.ToHref());
                    Assert.AreEqual("/blah/xyz", url2.Path);

                    url2 = req.Url.WithPathParent().WithPath("/blah/xyz");
                    Assert.AreEqual("/blah/xyz?thingy=stuff", url2.ToHref());
                    Assert.AreEqual("/blah/xyz", url2.Path);

                    okProp = true;
                    return resolverDocGen.Handle(req);
                })
            );

            resolverPropeller.Handle(new HttpRequest() { Url = url });

            Assert.IsTrue(okProp);
            Assert.IsTrue(okDocGen);
        }
コード例 #32
0
        protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            var java_uri = request.RequestUri.GetComponents(UriComponents.AbsoluteUri, UriFormat.UriEscaped);
            var url      = new Java.Net.URL(java_uri);

            var body = default(RequestBody);

            if (request.Content != null)
            {
                var bytes = await request.Content.ReadAsByteArrayAsync().ConfigureAwait(false);

                var contentType = "text/plain";
                if (request.Content.Headers.ContentType != null)
                {
                    contentType = string.Join(" ", request.Content.Headers.GetValues("Content-Type"));
                }
                body = RequestBody.Create(MediaType.Parse(contentType), bytes);
            }

            var requestBuilder = new Request.Builder()
                                 .Method(request.Method.Method.ToUpperInvariant(), body)
                                 .Url(url);

            if (DisableCaching)
            {
                requestBuilder.CacheControl(noCacheCacheControl);
            }

            var keyValuePairs = request.Headers
                                .Union(request.Content != null ?
                                       request.Content.Headers :
                                       Enumerable.Empty <KeyValuePair <string, IEnumerable <string> > >());

            // Add Cookie Header if there's any cookie for the domain in the cookie jar
            var stringBuilder = new StringBuilder();

            if (client.CookieJar() != null)
            {
                var jar     = client.CookieJar();
                var cookies = jar.LoadForRequest(HttpUrl.Get(url));
                foreach (var cookie in cookies)
                {
                    stringBuilder.Append(cookie.Name() + "=" + cookie.Value() + ";");
                }
            }

            foreach (var kvp in keyValuePairs)
            {
                if (kvp.Key == "Cookie")
                {
                    foreach (var val in kvp.Value)
                    {
                        stringBuilder.Append(val + ";");
                    }
                }
                else
                {
                    requestBuilder.AddHeader(kvp.Key, String.Join(getHeaderSeparator(kvp.Key), kvp.Value));
                }
            }

            if (stringBuilder.Length > 0)
            {
                requestBuilder.AddHeader("Cookie", stringBuilder.ToString().TrimEnd(';'));
            }

            if (Timeout != null)
            {
                var clientBuilder = client.NewBuilder();
                var timeout       = (long)Timeout.Value.TotalSeconds;
                clientBuilder.ConnectTimeout(timeout, TimeUnit.Seconds);
                clientBuilder.WriteTimeout(timeout, TimeUnit.Seconds);
                clientBuilder.ReadTimeout(timeout, TimeUnit.Seconds);
                client = clientBuilder.Build();
            }

            cancellationToken.ThrowIfCancellationRequested();

            var rq   = requestBuilder.Build();
            var call = client.NewCall(rq);

            // NB: Even closing a socket must be done off the UI thread. Cray!
            cancellationToken.Register(() => Task.Run(() => call.Cancel()));

            var resp = default(Response);

            try
            {
                resp = await call.EnqueueAsync().ConfigureAwait(false);

                var newReq = resp.Request();
                var newUri = newReq == null ? null : newReq.Url().Uri();
                request.RequestUri = new Uri(newUri.ToString());
                if (throwOnCaptiveNetwork && newUri != null)
                {
                    if (url.Host != newUri.Host)
                    {
                        throw new CaptiveNetworkException(new Uri(java_uri), new Uri(newUri.ToString()));
                    }
                }
            }
            catch (IOException ex)
            {
                if (ex.Message.ToLowerInvariant().Contains("canceled"))
                {
                    throw new System.OperationCanceledException();
                }

                // Calling HttpClient methods should throw .Net Exception when fail #5
                throw new HttpRequestException(ex.Message, ex);
            }

            var respBody = resp.Body();

            cancellationToken.ThrowIfCancellationRequested();

            var ret = new HttpResponseMessage((HttpStatusCode)resp.Code());

            ret.RequestMessage = request;
            ret.ReasonPhrase   = resp.Message();

            // ReasonPhrase is empty under HTTPS #8
            if (string.IsNullOrEmpty(ret.ReasonPhrase))
            {
                try
                {
                    ret.ReasonPhrase = ((ReasonPhrases)resp.Code()).ToString().Replace('_', ' ');
                }
#pragma warning disable 0168
                catch (Exception ex)
                {
                    ret.ReasonPhrase = "Unassigned";
                }
#pragma warning restore 0168
            }

            if (respBody != null)
            {
                var content = new ProgressStreamContent(respBody.ByteStream(), CancellationToken.None);
                content.Progress = getAndRemoveCallbackFromRegister(request);
                ret.Content      = content;
            }
            else
            {
                ret.Content = new ByteArrayContent(new byte[0]);
            }

            var respHeaders = resp.Headers();
            foreach (var k in respHeaders.Names())
            {
                ret.Headers.TryAddWithoutValidation(k, respHeaders.Get(k));
                ret.Content.Headers.TryAddWithoutValidation(k, respHeaders.Get(k));
            }

            return(ret);
        }
コード例 #33
0
 //Constructor
 public HttpRequest(HttpListenerContext context)
 {
     Context = context;
     Url     = new HttpUrl(this);
 }
コード例 #34
0
 private void CopyLink(HttpUrl httpUrl)
 {
     Clipboard.SetText(httpUrl.FullUrl);
 }
コード例 #35
0
ファイル: TVEUtil.cs プロジェクト: windygu/mp-onlinevideos2
        public override string GetVideoUrl(VideoInfo video)
        {
            if ("livestream".Equals(video.Other))
            {
                string data = GetWebData(video.VideoUrl);
                Match  m2   = Regex.Match(data, @"<param\sname=""flashvars""\svalue=""assetID=(?<assetid>[^_]*)_");
                if (m2.Success)
                {
                    data = GetWebData(String.Format(@"http://www.rtve.es/api/videos/{0}/config/portada.json", m2.Groups["assetid"].Value));
                    m2   = Regex.Match(data, @"""file"":""(?<url>[^""]*)""");
                    if (m2.Success)
                    {
                        RtmpUrl rtmpUrl = new RtmpUrl(m2.Groups["url"].Value)
                        {
                            Live   = true,
                            SwfUrl = @"http://www.rtve.es/swf/4.0.32/RTVEPlayerVideo.swf"
                        };
                        return(rtmpUrl.ToString());
                    }
                }
                return(null);
            }

            //source: http://code.google.com/p/xbmc-tvalacarta/source/browse/trunk/tvalacarta/servers/rtve.py:
            // thanks to aabilio and tvalacarta
            string[] parts = video.VideoUrl.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
            string   data2 = GetWebData(String.Format(@"http://www.rtve.es/ztnr/movil/thumbnail/anubis/videos/{0}.png", parts[parts.Length - 1]), referer: @"http://www.rtve.es");

            data2 = Encoding.ASCII.GetString(Convert.FromBase64String(data2));
            Match mm = Regex.Match(data2, ".*tEXt(?<cypher>.*)#[\x00]*(?<key>[0-9]*).*");

            if (mm.Success)
            {
                string cypher     = mm.Groups["cypher"].Value;
                string key        = mm.Groups["key"].Value;
                string int_cypher = "";
                int    inc        = 1;
                int    ti         = 0;
                while (ti < cypher.Length)
                {
                    ti = ti + inc;
                    if (ti > 0 && ti <= cypher.Length)
                    {
                        int_cypher += cypher[ti - 1];
                    }
                    inc++;
                    if (inc == 5)
                    {
                        inc = 1;
                    }
                }

                string plaintext = "";
                int    key_ind   = 0;
                inc = 4;
                while (key_ind < key.Length)
                {
                    key_ind++;
                    ti       = ((byte)key[key_ind - 1] - 48) * 10;
                    key_ind += inc;
                    if (key_ind <= key.Length)
                    {
                        ti += (byte)key[key_ind - 1] - 48;
                    }
                    ti++;
                    inc++;
                    if (inc == 5)
                    {
                        inc = 1;
                    }
                    if (ti > 0 && ti <= int_cypher.Length)
                    {
                        plaintext += int_cypher[ti - 1];
                    }
                }
                int    p   = plaintext.IndexOf("/resources");
                string url = @"http://flash.akamaihd.multimedia.cdn.rtve.es/auth" + plaintext.Substring(p) +
                             "?v=2.6.8&fp=WIN%2016,0,0,305&r=TDBDO&g=UZEYDOLYKFLY";

                string data = GetWebData(url);
                p = data.IndexOf('?');
                string finalUrl = plaintext.Substring(0, p) + data.Substring(0, p);
                finalUrl = Regex.Replace(finalUrl, @"(//.*?.rtve.es)", @"//mvod.lvlt.rtve.es");

                HttpUrl res = new HttpUrl(finalUrl);
                res.Cookies.Add(new Cookie("odin", "odin=banebdyede"));
                return(res.ToString());
            }

            return(null);
        }