From e312a4da0915fffffdfd0bbf6cd8b91ae7c39392 Mon Sep 17 00:00:00 2001 From: kaso17 Date: Sat, 10 Dec 2016 11:56:23 +0100 Subject: [PATCH] Curl: add support for request headers --- src/Jackett/CurlHelper.cs | 23 ++++++++++++++----- .../Utils/Clients/UnixLibCurlWebClient.cs | 4 ++-- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/Jackett/CurlHelper.cs b/src/Jackett/CurlHelper.cs index b3188e607..cdb91b588 100644 --- a/src/Jackett/CurlHelper.cs +++ b/src/Jackett/CurlHelper.cs @@ -24,14 +24,16 @@ namespace Jackett public string Referer { get; private set; } public HttpMethod Method { get; private set; } public IEnumerable> PostData { get; set; } + public Dictionary Headers { get; set; } public string RawPOSTDdata { get; set;} - public CurlRequest(HttpMethod method, string url, string cookies = null, string referer = null, string rawPOSTData = null) + public CurlRequest(HttpMethod method, string url, string cookies = null, string referer = null, Dictionary headers = null, string rawPOSTData = null) { Method = method; Url = url; Cookies = cookies; Referer = referer; + Headers = headers; RawPOSTDdata = rawPOSTData; } } @@ -52,16 +54,16 @@ namespace Jackett } } - public static async Task GetAsync(string url, string cookies = null, string referer = null) + public static async Task GetAsync(string url, string cookies = null, string referer = null, Dictionary headers = null) { - var curlRequest = new CurlRequest(HttpMethod.Get, url, cookies, referer); + var curlRequest = new CurlRequest(HttpMethod.Get, url, cookies, referer, headers); var result = await PerformCurlAsync(curlRequest); return result; } - public static async Task PostAsync(string url, IEnumerable> formData, string cookies = null, string referer = null, string rawPostData =null) + public static async Task PostAsync(string url, IEnumerable> formData, string cookies = null, string referer = null, Dictionary headers = null, string rawPostData =null) { - var curlRequest = new CurlRequest(HttpMethod.Post, url, cookies, referer); + var curlRequest = new CurlRequest(HttpMethod.Post, url, cookies, referer, headers); curlRequest.PostData = formData; curlRequest.RawPOSTDdata = rawPostData; var result = await PerformCurlAsync(curlRequest); @@ -90,7 +92,16 @@ namespace Jackett easy.BufferSize = 64 * 1024; easy.UserAgent = BrowserUtil.ChromeUserAgent; easy.FollowLocation = false; - easy.ConnectTimeout = 20; + easy.ConnectTimeout = 20; + if(curlRequest.Headers != null) + { + CurlSlist curlHeaders = new CurlSlist(); + foreach (var header in curlRequest.Headers) + { + curlHeaders.Append(header.Key + ": " + header.Value); + } + easy.SetOpt(CurlOption.HttpHeader, curlHeaders); + } easy.WriteFunction = (byte[] buf, int size, int nmemb, object data) => { diff --git a/src/Jackett/Utils/Clients/UnixLibCurlWebClient.cs b/src/Jackett/Utils/Clients/UnixLibCurlWebClient.cs index 867d4ac5a..c86f55700 100644 --- a/src/Jackett/Utils/Clients/UnixLibCurlWebClient.cs +++ b/src/Jackett/Utils/Clients/UnixLibCurlWebClient.cs @@ -100,7 +100,7 @@ namespace Jackett.Utils.Clients Jackett.CurlHelper.CurlResponse response; if (request.Type == RequestType.GET) { - response = await CurlHelper.GetAsync(request.Url, request.Cookies, request.Referer); + response = await CurlHelper.GetAsync(request.Url, request.Cookies, request.Referer, request.Headers); } else { @@ -113,7 +113,7 @@ namespace Jackett.Utils.Clients logger.Debug("UnixLibCurlWebClient: Posting " + StringUtil.PostDataFromDict(request.PostData)); } - response = await CurlHelper.PostAsync(request.Url, request.PostData, request.Cookies, request.Referer, request.RawBody); + response = await CurlHelper.PostAsync(request.Url, request.PostData, request.Cookies, request.Referer, request.Headers, request.RawBody); } var result = new WebClientByteResult()