Example #1
0
        public static CurlResponse PerformCurl(CurlRequest curlRequest)
        {
            Curl.GlobalInit(CurlInitFlag.All);

            var headerBuffers  = new List <byte[]>();
            var contentBuffers = new List <byte[]>();

            using (var easy = new CurlEasy())
            {
                easy.Url           = curlRequest.Url;
                easy.BufferSize    = 64 * 1024;
                easy.UserAgent     = ChromeUserAgent;
                easy.WriteFunction = (byte[] buf, int size, int nmemb, object data) =>
                {
                    contentBuffers.Add(buf);
                    return(size * nmemb);
                };
                easy.HeaderFunction = (byte[] buf, int size, int nmemb, object extraData) =>
                {
                    headerBuffers.Add(buf);
                    return(size * nmemb);
                };

                if (!string.IsNullOrEmpty(curlRequest.Cookies))
                {
                    easy.Cookie = curlRequest.Cookies;
                }

                if (!string.IsNullOrEmpty(curlRequest.Referer))
                {
                    easy.Referer = curlRequest.Referer;
                }

                if (curlRequest.Method == HttpMethod.Post)
                {
                    easy.Post = true;
                    var postString = new FormUrlEncodedContent(curlRequest.PostData).ReadAsStringAsync().Result;
                    easy.PostFields    = postString;
                    easy.PostFieldSize = Encoding.UTF8.GetByteCount(postString);
                }

                easy.Perform();
            }

            var headerBytes  = Combine(headerBuffers.ToArray());
            var headerString = Encoding.UTF8.GetString(headerBytes);
            var headerParts  = headerString.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
            var headers      = new List <string[]>();

            foreach (var headerPart in headerParts.Skip(1))
            {
                var keyVal = headerPart.Split(new char[] { ':' }, 2);
                if (keyVal.Length > 1)
                {
                    headers.Add(new[] { keyVal[0].ToLower().Trim(), keyVal[1].Trim() });
                }
            }

            var contentBytes = Combine(contentBuffers.ToArray());
            var curlResponse = new CurlResponse(headers, contentBytes);

            if (!string.IsNullOrEmpty(curlRequest.Cookies))
            {
                curlResponse.AddCookiesFromHeaderValue(curlRequest.Cookies);
            }
            curlResponse.AddCookiesFromHeaders(headers);

            return(curlResponse);
        }
Example #2
0
        public static CurlResponse PerformCurl(CurlRequest curlRequest)
        {
            lock (instance)
            {
                var headerBuffers = new List<byte[]>();
                var contentBuffers = new List<byte[]>();

                using (var easy = new CurlEasy())
                {
                    easy.Url = curlRequest.Url;
                    easy.BufferSize = 64 * 1024;
                    easy.UserAgent = BrowserUtil.ChromeUserAgent;
                    easy.FollowLocation = false;
                    easy.ConnectTimeout  = 20;
                    easy.WriteFunction = (byte[] buf, int size, int nmemb, object data) =>
                    {
                        contentBuffers.Add(buf);
                        return size * nmemb;
                    };
                    easy.HeaderFunction = (byte[] buf, int size, int nmemb, object extraData) =>
                    {
                        headerBuffers.Add(buf);
                        return size * nmemb;
                    };

                    if (!string.IsNullOrEmpty(curlRequest.Cookies))
                        easy.Cookie = curlRequest.Cookies;

                    if (!string.IsNullOrEmpty(curlRequest.Referer))
                        easy.Referer = curlRequest.Referer;

                    if (curlRequest.Method == HttpMethod.Post)
                    {
                        easy.Post = true;
                        var postString = new FormUrlEncodedContent(curlRequest.PostData).ReadAsStringAsync().Result;
                        easy.PostFields = postString;
                        easy.PostFieldSize = Encoding.UTF8.GetByteCount(postString);
                    }

                    easy.Perform();
                }

                var headerBytes = Combine(headerBuffers.ToArray());
                var headerString = Encoding.UTF8.GetString(headerBytes);
                var headerParts = headerString.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
                var headers = new List<string[]>();
                var headerCount = 0;
                HttpStatusCode status = HttpStatusCode.InternalServerError;
                foreach (var headerPart in headerParts)
                {
                    if (headerCount == 0)
                    {
                        var responseCode = int.Parse(headerPart.Split(' ')[1]);
                        status = (HttpStatusCode)responseCode;
                    }
                    else
                    {
                        var keyVal = headerPart.Split(new char[] { ':' }, 2);
                        if (keyVal.Length > 1)
                        {
                            headers.Add(new[] { keyVal[0].ToLower().Trim(), keyVal[1].Trim() });
                        }
                    }

                    headerCount++;
                }

                var contentBytes = Combine(contentBuffers.ToArray());

                var curlResponse = new CurlResponse(headers, contentBytes, status);
                if (!string.IsNullOrEmpty(curlRequest.Cookies))
                    curlResponse.AddCookiesFromHeaderValue(curlRequest.Cookies);
                curlResponse.AddCookiesFromHeaders(headers);

                return curlResponse;
            }
        }
Example #3
0
        public static CurlResponse PerformCurl(CurlRequest curlRequest)
        {
            Curl.GlobalInit(CurlInitFlag.All);

            var headerBuffers = new List<byte[]>();
            var contentBuffers = new List<byte[]>();

            using (var easy = new CurlEasy())
            {
                easy.Url = curlRequest.Url;
                easy.BufferSize = 64 * 1024;
                easy.UserAgent = ChromeUserAgent;
                easy.WriteFunction = (byte[] buf, int size, int nmemb, object data) =>
                {
                    contentBuffers.Add(buf);
                    return size * nmemb;
                };
                easy.HeaderFunction = (byte[] buf, int size, int nmemb, object extraData) =>
                {
                    headerBuffers.Add(buf);
                    return size * nmemb;
                };

                if (!string.IsNullOrEmpty(curlRequest.Cookies))
                    easy.Cookie = curlRequest.Cookies;

                if (!string.IsNullOrEmpty(curlRequest.Referer))
                    easy.Referer = curlRequest.Referer;

                if (curlRequest.Method == HttpMethod.Post)
                {
                    easy.Post = true;
                    var postString = new FormUrlEncodedContent(curlRequest.PostData).ReadAsStringAsync().Result;
                    easy.PostFields = postString;
                    easy.PostFieldSize = Encoding.UTF8.GetByteCount(postString);
                }

                easy.Perform();
            }

            var headerBytes = Combine(headerBuffers.ToArray());
            var headerString = Encoding.UTF8.GetString(headerBytes);
            var headerParts = headerString.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
            var headers = new List<string[]>();
            foreach (var headerPart in headerParts.Skip(1))
            {
                var keyVal = headerPart.Split(new char[] { ':' }, 2);
                if (keyVal.Length > 1)
                {
                    headers.Add(new[] { keyVal[0].ToLower().Trim(), keyVal[1].Trim() });
                }
            }

            var contentBytes = Combine(contentBuffers.ToArray());
            var curlResponse = new CurlResponse(headers, contentBytes);

            if (!string.IsNullOrEmpty(curlRequest.Cookies))
                curlResponse.AddCookiesFromHeaderValue(curlRequest.Cookies);
            curlResponse.AddCookiesFromHeaders(headers);

            return curlResponse;

        }