コード例 #1
0
ファイル: Http.cs プロジェクト: TiCK3R/SharpLeech
        public static HttpResult FastRequest(HttpWebRequest req)
        {
            HttpWebResponse rsp = null;
            HttpResult output = null;
            String enc, result = String.Empty;

            try
            {
                req.KeepAlive = false;

                if (UseCompression) req.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");

                rsp = (HttpWebResponse)req.GetResponse();
                enc = rsp.ContentEncoding.ToLower();

                lock (SessionCookies)
                {
                    if (rsp.Cookies != null && rsp.Cookies.Count > 0) SessionCookies.Add(rsp.Cookies);
                }

                output = new HttpResult(result, rsp, null);
                rsp.Close();
            }
            catch (Exception error)
            {
                output = new HttpResult(String.Empty, null, error);
            }

            return output;
        }
コード例 #2
0
ファイル: Http.cs プロジェクト: TiCK3R/SharpLeech
        public static HttpResult Request(HttpWebRequest req)
        {
            HttpWebResponse rsp = null;
            HttpResult output = null;
            String enc, result = String.Empty;

            try
            {
                if (UseCompression) req.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");

                rsp = (HttpWebResponse)req.GetResponse();
                enc = rsp.ContentEncoding.ToLower();

                if (enc.Contains("gzip"))
                {
                    using (var s = new GZipStream(rsp.GetResponseStream(), CompressionMode.Decompress))
                    using (var sr = new StreamReader(s, Encoding.GetEncoding(rsp.CharacterSet)))
                    {
                        result = sr.ReadToEnd();
                        s.Close();
                        sr.Close();
                    }
                }
                else if (enc.Contains("deflate"))
                {
                    using (var s = new DeflateStream(rsp.GetResponseStream(), CompressionMode.Decompress))
                    using (var sr = new StreamReader(s, Encoding.GetEncoding(rsp.CharacterSet)))
                    {
                        result = sr.ReadToEnd();
                        s.Close();
                        sr.Close();
                    }
                }
                else
                {
                    using (var s = rsp.GetResponseStream())
                    using (var sr = new StreamReader(s, Encoding.GetEncoding(rsp.CharacterSet)))
                    {
                        result = sr.ReadToEnd();
                        s.Close();
                        sr.Close();
                    }
                }

                lock (SessionCookies)
                {
                    if (rsp.Cookies != null && rsp.Cookies.Count > 0) SessionCookies.Add(rsp.Cookies);
                    //FixCookieDomains()
                }

                output = new HttpResult(result, rsp, null);
                rsp.Close();
            }
            catch (Exception error)
            {
                output = new HttpResult(String.Empty, null, error);
            }

            return output;
        }
コード例 #3
0
ファイル: Http.cs プロジェクト: ferrolad/SharpLeech
        public static HttpResult Request(HttpWebRequest req)
        {
            HttpWebResponse rsp = null;
            HttpResult      output = null;
            String          enc, result = String.Empty;

            try
            {
                if (UseCompression)
                {
                    req.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");
                }

                rsp = (HttpWebResponse)req.GetResponse();
                enc = rsp.ContentEncoding.ToLower();

                if (enc.Contains("gzip"))
                {
                    using (var s = new GZipStream(rsp.GetResponseStream(), CompressionMode.Decompress))
                        using (var sr = new StreamReader(s, Encoding.GetEncoding(rsp.CharacterSet)))
                        {
                            result = sr.ReadToEnd();
                            s.Close();
                            sr.Close();
                        }
                }
                else if (enc.Contains("deflate"))
                {
                    using (var s = new DeflateStream(rsp.GetResponseStream(), CompressionMode.Decompress))
                        using (var sr = new StreamReader(s, Encoding.GetEncoding(rsp.CharacterSet)))
                        {
                            result = sr.ReadToEnd();
                            s.Close();
                            sr.Close();
                        }
                }
                else
                {
                    using (var s = rsp.GetResponseStream())
                        using (var sr = new StreamReader(s, Encoding.GetEncoding(rsp.CharacterSet)))
                        {
                            result = sr.ReadToEnd();
                            s.Close();
                            sr.Close();
                        }
                }

                lock (SessionCookies)
                {
                    if (rsp.Cookies != null && rsp.Cookies.Count > 0)
                    {
                        SessionCookies.Add(rsp.Cookies);
                    }
                    //FixCookieDomains()
                }

                output = new HttpResult(result, rsp, null);
                rsp.Close();
            }
            catch (Exception error)
            {
                output = new HttpResult(String.Empty, null, error);
            }

            return(output);
        }
コード例 #4
0
ファイル: Http.cs プロジェクト: TiCK3R/SharpLeech
        public static HttpResult HandleRedirects(HttpResult result, bool isFastRequest)
        {
            var count = 0;
            var r = result;
            var url = String.Empty;
            var status = (result.HasError) ? HttpStatusCode.NotFound : result.Response.StatusCode;

            Func<HttpStatusCode, Boolean> allowContinue = statusCode =>
            {
                switch (statusCode)
                {
                    case HttpStatusCode.MovedPermanently:
                    case HttpStatusCode.Found:
                        return true;
                    default:
                        return false;
                }
            };

            Func<String, Boolean> needsRedirect = location =>
            {
                Uri uri = null;
                return (location != null && location.Length > 0 && Uri.TryCreate(location, UriKind.Absolute, out uri));
            };

            if (r.HasError || MaxRedirects < 1) return result;
            else if (MaxRedirects == 1)
            {
                url = r.Response.Headers["Location"];

                if (needsRedirect(url))
                {
                    return (isFastRequest) ? FastRequest(Prepare(url)) : Request(Prepare(url));
                }
                else return result;
            }
            else
            {
                while (count < MaxRedirects && !r.HasError && allowContinue(r.Response.StatusCode))
                {
                    url = r.Response.Headers["Location"];

                    if (needsRedirect(url))
                    {
                        r = (isFastRequest) ? FastRequest(Prepare(url)) : Request(Prepare(url));
                    }

                    count++;
                }

                return r;
            }
        }
コード例 #5
0
ファイル: SiteType.cs プロジェクト: TiCK3R/SharpLeech
 public TopicPostedEventArgs(SiteTopic topic, HttpResult result)
 {
     this.Topic = topic;
     this.Result = result;
 }