Ejemplo n.º 1
0
        public override bool ProcessRequestAsync(IRequest taskRequest, ICallback callback)
        {
            var headers  = taskRequest.Headers;
            var url      = taskRequest.Url;
            var method   = taskRequest.Method;
            var postData = taskRequest.PostData?.Elements.FirstOrDefault()?.GetBody();

            Task.Run(() =>
            {
                using (callback)
                {
                    try
                    {
                        var httpClient = new HttpClient();
                        foreach (var header in headers.AllKeys)
                        {
                            if (header.ToLower() != "content-type")
                            {
                                httpClient.DefaultRequestHeaders.Add(header, headers.GetValues(header));
                            }
                        }

                        HttpResponseMessage response = null;
                        if (method == "OPTIONS")
                        {
                            // CORS のやつだし、テンプレでいいでしょ
                            StatusCode = 200;
                            MimeType   = "text/plain";
                            Stream     = null;
                            Headers.Set("Content-Length", "0");
                            Headers.Set("Content-Type", "text/plain; charset=utf-8");
                            Headers.Set("Access-Control-Allow-Headers", "Accept, Accept-Encoding, Content-Type, Authorization");
                            Headers.Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
                            Headers.Set("Access-Control-Allow-Origin", "https://abema.tv");
                            Headers.Set("Access-Control-Max-Age", "86400");
                            Headers.Set("Vary", "Origin");
                            Headers.Set("Alt-Svc", "clear");
                            Headers.Set("Date", DateTime.Now.ToString("R"));
                            Headers.Set("Via", "1.1 google");
                            callback.Continue();
                            return;
                        }
                        else
                        {
                            CapturingRequest(url, headers, postData);
                        }

                        if (method == "GET")
                        {
                            response = httpClient.GetAsync(url).Result;
                        }
                        if (method == "POST")
                        {
                            var httpContent = new StringContent2(postData, Encoding.UTF8, "application/json");
                            response        = httpClient.PostAsync(url, httpContent).Result;
                        }
                        if (method == "PUT")
                        {
                            var httpContent = new StringContent2(postData, Encoding.UTF8, "application/json");
                            response        = httpClient.PutAsync(url, httpContent).Result;
                        }

                        Debug.WriteLine($"APICALL: {url}");
                        // 知らん
                        if (response == null)
                        {
                            throw new NotSupportedException();
                        }

                        StatusCode = response.StatusCode.GetHashCode();
                        MimeType   = response.Content.Headers.ContentType.MediaType;
                        Stream     = response.Content.ReadAsStreamAsync().Result;
                        foreach (var header in response.Content.Headers)
                        {
                            foreach (var value in header.Value)
                            {
                                Headers.Set(header.Key, value);
                            }
                        }
                        foreach (var header in response.Headers)
                        {
                            foreach (var value in header.Value)
                            {
                                Headers.Set(header.Key, value);
                            }
                        }

                        CapturingResponse(url, Headers, response.Content.ReadAsStringAsync().Result);
                    }
                    catch (Exception e)
                    {
                        Debug.WriteLine(e.Message);
                    }
                    finally
                    {
                        if (!callback.IsDisposed)
                        {
                            callback.Continue();
                        }
                    }
                }
            });

            return(true);
        }
Ejemplo n.º 2
0
        public override bool ProcessRequestAsync(IRequest request, ICallback callback)
        {
            try
            {
                var httpClient = new HttpClient();
                foreach (var header in request.Headers.AllKeys)
                {
                    if (header.ToLower() != "content-type")
                    {
                        httpClient.DefaultRequestHeaders.Add(header, request.Headers.GetValues(header));
                    }
                }

                var url = request.Url;
                if (_config.VideoQuality != VideoQuality.Auto)
                {
                    url = _pattern.Replace(url, _config.VideoQuality.ToProgressive(), 1);
                }
                HttpResponseMessage response = null;
                if (request.Method == "OPTIONS")
                {
                    response = httpClient.SendAsync(new HttpRequestMessage(HttpMethod.Options, url)).Result;
                }

                if (request.Method == "GET")
                {
                    response = httpClient.GetAsync(url).Result;
                }
                if (request.Method == "POST")
                {
                    var content     = request.PostData?.Elements.FirstOrDefault()?.GetBody();
                    var httpContent = new StringContent2(content, Encoding.UTF8, "application/json");
                    response = httpClient.PostAsync(url, httpContent).Result;
                }
                if (request.Method == "PUT")
                {
                    var content     = request.PostData?.Elements.FirstOrDefault()?.GetBody();
                    var httpContent = new StringContent2(content, Encoding.UTF8, "application/json");
                    response = httpClient.PutAsync(url, httpContent).Result;
                }

                // 知らん
                if (response == null)
                {
                    throw new NotSupportedException();
                }

                StatusCode = response.StatusCode.GetHashCode();
                MimeType   = response.Content.Headers.ContentType.MediaType;
                Stream     = response.Content.ReadAsStreamAsync().Result;
                foreach (var header in response.Content.Headers)
                {
                    foreach (var value in header.Value)
                    {
                        Headers.Set(header.Key, value);
                    }
                }
                foreach (var header in response.Headers)
                {
                    foreach (var value in header.Value)
                    {
                        Headers.Set(header.Key, value);
                    }
                }

                callback.Continue();
            }
            catch (Exception e)
            {
                Debug.WriteLine(e.Message);
            }
            return(true);
        }