private HttpWebRequest CreateRequest()
        {
            HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(Url);

            httpWebRequest.UserAgent       = UserAgent;
            httpWebRequest.PreAuthenticate = PreAuthenticate;
            httpWebRequest.Accept          = Accept;
            httpWebRequest.Timeout         = TimeoutRequest;
            httpWebRequest.KeepAlive       = KeepAlive;

            if (this.Parameters != null && this.Parameters.Length > 0)
            {
                httpWebRequest.Method = "POST";
            }
            else
            {
                httpWebRequest.Method = "GET";
            }

            httpWebRequest.Headers["Accept-Encoding"] = AcceptEncoding;
            httpWebRequest.Headers["Accept-Language"] = AcceptLanguage;
            httpWebRequest.Headers["UA-CPU"]          = UACPU;
            httpWebRequest.Headers["Cache-Control"]   = CacheControl;

            if (!string.IsNullOrEmpty(RequestedWith))
            {
                httpWebRequest.Headers["x-requested-with"] = RequestedWith;
            }

            httpWebRequest.ContentLength     = 0L;
            httpWebRequest.AllowAutoRedirect = AutoRedirect;

            if (Headers != null)
            {
                foreach (KeyValuePair <string, string> header in Headers)
                {
                    httpWebRequest.Headers.Add(header.Key, header.Value);
                }
            }

            if (Referer != null)
            {
                httpWebRequest.Referer = Referer;
            }
            httpWebRequest.CookieContainer = new CookieContainer();

            if (AllCookies.Count > 0)
            {
                foreach (Cookie todosCookie in AllCookies)
                {
                    httpWebRequest.CookieContainer.Add(todosCookie);
                }
            }

            if (Parameters != null && Parameters.Trim().Length > 0)
            {
                byte[] bytes = EncodingPage.GetBytes(Parameters);
                httpWebRequest.Method        = "POST";
                httpWebRequest.ContentType   = ContentType;
                httpWebRequest.ContentLength = bytes.Length;
                using (Stream requestStream = httpWebRequest.GetRequestStream())
                {
                    requestStream.Write(bytes, 0, bytes.Length);
                    requestStream.Close();
                }
            }

            return(httpWebRequest);
        }
Beispiel #2
0
        internal ResponseHttp LoadPage(string url)
        {
            responseHttp = new ResponseHttp();
            this.Url     = url;
            lock (SyncRoot)
            {
                try
                {
                    HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(Url);
                    httpWebRequest.UserAgent       = UserAgent;
                    httpWebRequest.PreAuthenticate = PreAuthenticate;
                    httpWebRequest.Accept          = Accept;
                    httpWebRequest.Timeout         = TimeoutRequest;
                    httpWebRequest.KeepAlive       = KeepAlive;

                    if (this.Parameters != null && this.Parameters.Length > 0)
                    {
                        httpWebRequest.Method = "POST";
                    }
                    else
                    {
                        httpWebRequest.Method = "GET";
                    }

                    httpWebRequest.Headers["Accept-Encoding"] = AcceptEncoding;
                    httpWebRequest.Headers["Accept-Language"] = AcceptLanguage;
                    httpWebRequest.Headers["UA-CPU"]          = UACPU;
                    httpWebRequest.Headers["Cache-Control"]   = CacheControl;

                    if (!string.IsNullOrEmpty(RequestedWith))
                    {
                        httpWebRequest.Headers["x-requested-with"] = RequestedWith;
                    }

                    httpWebRequest.ContentLength     = 0L;
                    httpWebRequest.AllowAutoRedirect = AutoRedirect;

                    if (Headers != null)
                    {
                        foreach (KeyValuePair <string, string> header in Headers)
                        {
                            httpWebRequest.Headers.Add(header.Key, header.Value);
                        }
                    }

                    if (Referer != null)
                    {
                        httpWebRequest.Referer = Referer;
                    }
                    httpWebRequest.CookieContainer = new CookieContainer();

                    if (AllCookies.Count > 0)
                    {
                        foreach (Cookie todosCookie in AllCookies)
                        {
                            httpWebRequest.CookieContainer.Add(todosCookie);
                        }
                    }

                    if (Parameters != null && Parameters.Trim().Length > 0)
                    {
                        byte[] bytes = EncodingPage.GetBytes(Parameters);
                        httpWebRequest.Method        = "POST";
                        httpWebRequest.ContentType   = ContentType;
                        httpWebRequest.ContentLength = bytes.Length;
                        using (Stream requestStream = httpWebRequest.GetRequestStream())
                        {
                            requestStream.Write(bytes, 0, bytes.Length);
                            requestStream.Close();
                        }
                    }

                    string html;
                    string responseHeader;
                    using (HttpWebResponse response = (HttpWebResponse)httpWebRequest.GetResponse())
                    {
                        responseHttp.StatusCode = response.StatusCode;

                        if (response.ContentType.StartsWith("image"))
                        {
                            using (Stream responseStream = response.GetResponseStream())
                                html = string.Format("data:{0};base64,{1}", response.ContentType, Convert.ToBase64String(responseStream.ReadAllBytes()));
                        }
                        else
                        {
                            using (Stream responseStream = response.GetResponseStream())
                            {
                                Stream stream = null;
                                try
                                {
                                    stream = string.IsNullOrEmpty(response.ContentEncoding) || !response.ContentEncoding.ToLower().Contains("gzip") ? (string.IsNullOrEmpty(response.ContentEncoding) || !response.ContentEncoding.ToLower().Contains("deflate") ? responseStream : new DeflateStream(responseStream, CompressionMode.Decompress)) : new GZipStream(responseStream, CompressionMode.Decompress);
                                    using (StreamReader streamReader = new StreamReader(stream, DefaultEncoding))
                                    {
                                        html = streamReader.ReadToEnd();
                                        streamReader.Close();
                                    }
                                    responseStream.Close();
                                }
                                finally
                                {
                                    if (stream != null)
                                    {
                                        stream.Dispose();
                                    }
                                }
                            }
                        }
                        AddCookies(response.Cookies, responseHttp);
                        AddInternalCookie(response, responseHttp);
                        responseHeader            = response.GetResponseHeader("Location");
                        responseHttp.UrlLocation  = responseHeader;
                        responseHttp.Method       = response.Method;
                        responseHttp.Server       = response.Server;
                        responseHttp.HeadersAdded = this.Headers;
                        response.Close();
                    }

                    if (MaxRedirect > 0)
                    {
                        if (!string.IsNullOrEmpty(responseHeader) && Uri.IsWellFormedUriString(responseHeader, UriKind.Absolute))
                        {
                            MaxRedirect--;
                            this.Referer = url;
                            return(LoadPage(responseHeader));
                        }
                    }
                    responseHttp.HtmlPage = html;

                    LoadTypes(html, responseHttp);

                    OnLoad?.Invoke(this, new RequestHttpEventArgs(html, responseHttp));

                    return(responseHttp);
                }
                catch (WebException ex)
                {
                    responseHttp.StatusCode = HttpStatusCode.InternalServerError;
                }
                //catch (Exception ex)
                //{
                //    return null;
                //}

                return(responseHttp);
            }
        }