public static async Task <CurlResponse> GetAsync(string url, string cookies = null, string referer = null) { var curlRequest = new CurlRequest(HttpMethod.Get, url, cookies, referer); var result = await PerformCurlAsync(curlRequest); return(result); }
public async Task<string> GetStringAsync(string url, string cookies = null, string referer = null) { var curlRequest = new CurlRequest(HttpMethod.Get, url, cookies, referer); curlRequests.Add(curlRequest); var result = await curlRequest.TaskCompletion.Task; return result; }
public static async Task<CurlResponse> PostAsync(string url, Dictionary<string, string> formData, string cookies = null, string referer = null) { var curlRequest = new CurlRequest(HttpMethod.Post, url, cookies, referer); curlRequest.PostData = formData; var result = await PerformCurlAsync(curlRequest); return result; }
public static async Task <CurlResponse> GetAsync(string url, ServerConfig config, string cookies = null, string referer = null, Dictionary <string, string> headers = null) { var curlRequest = new CurlRequest(HttpMethod.Get, url, cookies, referer, headers); var result = await PerformCurlAsync(curlRequest, config); return(result); }
public static async Task<CurlResponse> PostAsync(string url, IEnumerable<KeyValuePair<string, string>> formData, string cookies = null, string referer = null, Dictionary<string, string> headers = null, string rawPostData =null) { var curlRequest = new CurlRequest(HttpMethod.Post, url, cookies, referer, headers); curlRequest.PostData = formData; curlRequest.RawPOSTDdata = rawPostData; var result = await PerformCurlAsync(curlRequest); return result; }
public ActionResult HttpCall() { string searchName = "apple"; string typeSearch = "search="; CurlRequest.Http(searchName, typeSearch); return(View()); }
public ActionResult CurlCall() { string hourlyTemp = "daily-high-temperature"; string location = "/43.029494/-87.904047"; CurlRequest.Curl(hourlyTemp, location); return(RedirectToAction("Index", "Home")); }
public static async Task <CurlResponse> PostAsync(string url, IEnumerable <KeyValuePair <string, string> > formData, string cookies = null, string referer = null) { var curlRequest = new CurlRequest(HttpMethod.Post, url, cookies, referer); curlRequest.PostData = formData; var result = await PerformCurlAsync(curlRequest); return(result); }
public async Task <string> GetStringAsync(string url, string cookies = null, string referer = null) { var curlRequest = new CurlRequest(HttpMethod.Get, url, cookies, referer); curlRequests.Add(curlRequest); var result = await curlRequest.TaskCompletion.Task; return(result); }
public static async Task <CurlResponse> PostAsync(string url, ServerConfig config, IEnumerable <KeyValuePair <string, string> > formData, string cookies = null, string referer = null, Dictionary <string, string> headers = null, string rawPostData = null) { var curlRequest = new CurlRequest(HttpMethod.Post, url, cookies, referer, headers); curlRequest.PostData = formData; curlRequest.RawPOSTDdata = rawPostData; var result = await PerformCurlAsync(curlRequest, config); return(result); }
public static async Task <CurlResponse> PostAsync(string url, Dictionary <string, string> formData, string cookies = null, string referer = null) { var curlRequest = new CurlRequest(HttpMethod.Post, url, cookies, referer); curlRequest.PostData = formData; var result = await PerformCurlAsync(curlRequest); var checkedResult = await FollowRedirect(url, result); return(checkedResult); }
private void PerformCurl(CurlRequest curlRequest) { var headerBuffers = new List <byte[]>(); var contentBuffers = new List <byte[]>(); try { using (var easy = new CurlEasy()) { easy.Url = curlRequest.Url; easy.BufferSize = 64 * 1024; //easy.Encoding = "UTF8"; 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 (curlRequest.Method == HttpMethod.Post) { easy.Post = true; easy.PostFields = curlRequest.PostData; easy.PostFieldSize = Encoding.UTF8.GetByteCount(curlRequest.PostData); } easy.Perform(); } var headerBytes = Combine(headerBuffers.ToArray()); var headerString = Encoding.UTF8.GetString(headerBytes); var contentBytes = Combine(contentBuffers.ToArray()); var result = Encoding.UTF8.GetString(contentBytes); curlRequest.TaskCompletion.SetResult(result); } catch (Exception ex) { curlRequest.TaskCompletion.TrySetException(ex); } }
private void PerformCurl(CurlRequest curlRequest) { var headerBuffers = new List<byte[]>(); var contentBuffers = new List<byte[]>(); try { using (var easy = new CurlEasy()) { easy.Url = curlRequest.Url; easy.BufferSize = 64 * 1024; //easy.Encoding = "UTF8"; 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 (curlRequest.Method == HttpMethod.Post) { easy.Post = true; easy.PostFields = curlRequest.PostData; easy.PostFieldSize = Encoding.UTF8.GetByteCount(curlRequest.PostData); } easy.Perform(); } var headerBytes = Combine(headerBuffers.ToArray()); var headerString = Encoding.UTF8.GetString(headerBytes); var contentBytes = Combine(contentBuffers.ToArray()); var result = Encoding.UTF8.GetString(contentBytes); curlRequest.TaskCompletion.SetResult(result); } catch (Exception ex) { curlRequest.TaskCompletion.TrySetException(ex); } }
public RzJsonResultModel CadastraPagamentoBoleto(TransacaoBoleto pagamentoBoleto) { try { pagamentoBoleto.api_key = LocalConfig.Values["PagarMeAPIDefaultApiKey"]; pagamentoBoleto.defaultEncryptionKey = LocalConfig.Values["PagarMeAPIDefaultEncryptionKey"]; string content = JsonSerializer.Serialize(pagamentoBoleto); string responseText = CurlRequest.SendRequest("https://api.pagar.me/1/transactions", content, "POST"); return(RzJsonResultModel.ReturnSuccess("OK", responseText)); //return RzJsonResultModel.ReturnSuccess("OK", ""); } catch (Exception ex) { return(RzJsonResultModel.ReturnError(ex.Message)); } }
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; } }
public static async Task<CurlResponse> GetAsync(string url, string cookies = null, string referer = null) { var curlRequest = new CurlRequest(HttpMethod.Get, url, cookies, referer); var result = await PerformCurlAsync(curlRequest); return result; }
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; 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) => { 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) { if (!string.IsNullOrEmpty(curlRequest.RawPOSTDdata)) { easy.Post = true; easy.PostFields = curlRequest.RawPOSTDdata; easy.PostFieldSize = Encoding.UTF8.GetByteCount(curlRequest.RawPOSTDdata); } else { easy.Post = true; var postString = StringUtil.PostDataFromDict(curlRequest.PostData); easy.PostFields = postString; easy.PostFieldSize = Encoding.UTF8.GetByteCount(postString); } } if (Startup.DoSSLFix == true) { // http://stackoverflow.com/questions/31107851/how-to-fix-curl-35-cannot-communicate-securely-with-peer-no-common-encryptio // https://git.fedorahosted.org/cgit/mod_nss.git/plain/docs/mod_nss.html easy.SslCipherList = SSLFix.CipherList; easy.FreshConnect = true; easy.ForbidReuse = true; } if (Startup.IgnoreSslErrors == true) { easy.SetOpt(CurlOption.SslVerifyhost, false); easy.SetOpt(CurlOption.SslVerifyPeer, false); } if (Startup.ProxyConnection != null) { easy.SetOpt(CurlOption.Proxy, Startup.ProxyConnection); } easy.Perform(); if (easy.LastErrorCode != CurlCode.Ok) { var message = "Error " + easy.LastErrorCode.ToString() + " " + easy.LastErrorDescription + " " + easy.ErrorBuffer; if (null != OnErrorMessage) OnErrorMessage(message); else Console.WriteLine(message); } } var headerBytes = Combine(headerBuffers.ToArray()); var headerString = Encoding.UTF8.GetString(headerBytes); if (Startup.ProxyConnection != null) { var firstcrlf = headerString.IndexOf("\r\n\r\n"); var secondcrlf = headerString.IndexOf("\r\n\r\n", firstcrlf + 1); if (secondcrlf > 0) { headerString = headerString.Substring(firstcrlf + 4, secondcrlf - (firstcrlf)); } } var headerParts = headerString.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries); var headers = new List<string[]>(); var headerCount = 0; HttpStatusCode status = HttpStatusCode.NotImplemented; var cookieBuilder = new StringBuilder(); var cookies = new List<Tuple<string, string>>(); foreach (var headerPart in headerParts) { if (headerCount == 0) { var split = headerPart.Split(' '); if (split.Length < 2) throw new Exception("HTTP Header missing"); var responseCode = int.Parse(headerPart.Split(' ')[1]); status = (HttpStatusCode)responseCode; } else { var keyVal = headerPart.Split(new char[] { ':' }, 2); if (keyVal.Length > 1) { var key = keyVal[0].ToLower().Trim(); var value = keyVal[1].Trim(); if (key == "set-cookie") { var nameSplit = value.IndexOf('='); if (nameSplit > -1) { cookies.Add(new Tuple<string, string>(value.Substring(0, nameSplit), value.Substring(0, value.IndexOf(';') + 1))); } } else { headers.Add(new[] { key, value }); } } } headerCount++; } foreach (var cookieGroup in cookies.GroupBy(c => c.Item1)) { cookieBuilder.AppendFormat("{0} ", cookieGroup.Last().Item2); } // add some debug output to track down the problem causing people getting InternalServerError results if (status == HttpStatusCode.NotImplemented || status == HttpStatusCode.InternalServerError) { try { OnErrorMessage("got NotImplemented/InternalServerError"); OnErrorMessage("request.Method: " + curlRequest.Method); OnErrorMessage("request.Url: " + curlRequest.Url); OnErrorMessage("request.Cookies: " + curlRequest.Cookies); OnErrorMessage("request.Referer: " + curlRequest.Referer); OnErrorMessage("request.RawPOSTDdata: " + curlRequest.RawPOSTDdata); OnErrorMessage("cookies: "+ cookieBuilder.ToString().Trim()); OnErrorMessage("headerString:\n" + headerString); foreach (var headerPart in headerParts) { OnErrorMessage("headerParts: "+headerPart); } } catch (Exception ex) { OnErrorMessage(string.Format("CurlHelper: error while handling NotImplemented/InternalServerError:\n{0}", ex)); } } var contentBytes = Combine(contentBuffers.ToArray()); var curlResponse = new CurlResponse(headers, contentBytes, status, cookieBuilder.ToString().Trim()); return curlResponse; } }
public static async Task<CurlResponse> PerformCurlAsync(CurlRequest curlRequest) { return await Task.Run(() => PerformCurl(curlRequest)); }
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 = StringUtil.PostDataFromDict(curlRequest.PostData); easy.PostFields = postString; easy.PostFieldSize = Encoding.UTF8.GetByteCount(postString); } if (Startup.DoSSLFix == true) { // http://stackoverflow.com/questions/31107851/how-to-fix-curl-35-cannot-communicate-securely-with-peer-no-common-encryptio // https://git.fedorahosted.org/cgit/mod_nss.git/plain/docs/mod_nss.html easy.SslCipherList = SSLFix.CipherList; easy.FreshConnect = true; easy.ForbidReuse = true; } easy.Perform(); if (easy.LastErrorCode != CurlCode.Ok) { var message = "Error " + easy.LastErrorCode.ToString() + " " + easy.LastErrorDescription; if (null != OnErrorMessage) { OnErrorMessage(message); } else { Console.WriteLine(message); } } } 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; var cookieBuilder = new StringBuilder(); foreach (var headerPart in headerParts) { if (headerCount == 0) { var split = headerPart.Split(' '); if (split.Length < 2) { throw new Exception("HTTP Header missing"); } var responseCode = int.Parse(headerPart.Split(' ')[1]); status = (HttpStatusCode)responseCode; } else { var keyVal = headerPart.Split(new char[] { ':' }, 2); if (keyVal.Length > 1) { var key = keyVal[0].ToLower().Trim(); var value = keyVal[1].Trim(); if (key == "set-cookie") { cookieBuilder.AppendFormat("{0} ", value.Substring(0, value.IndexOf(';') + 1)); } else { headers.Add(new[] { key, value }); } } } headerCount++; } var contentBytes = Combine(contentBuffers.ToArray()); var curlResponse = new CurlResponse(headers, contentBytes, status, cookieBuilder.ToString().TrimEnd()); return(curlResponse); } }
public static CurlResponse PerformCurl(CurlRequest curlRequest, ServerConfig config) { 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; 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) => { 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) { if (!string.IsNullOrEmpty(curlRequest.RawPOSTDdata)) { easy.Post = true; easy.PostFields = curlRequest.RawPOSTDdata; easy.PostFieldSize = Encoding.UTF8.GetByteCount(curlRequest.RawPOSTDdata); } else { easy.Post = true; var postString = StringUtil.PostDataFromDict(curlRequest.PostData); easy.PostFields = postString; easy.PostFieldSize = Encoding.UTF8.GetByteCount(postString); } } if (JackettStartup.DoSSLFix == true) { // http://stackoverflow.com/questions/31107851/how-to-fix-curl-35-cannot-communicate-securely-with-peer-no-common-encryptio // https://git.fedorahosted.org/cgit/mod_nss.git/plain/docs/mod_nss.html easy.SslCipherList = SSLFix.CipherList; easy.FreshConnect = true; easy.ForbidReuse = true; } if (JackettStartup.IgnoreSslErrors == true) { easy.SetOpt(CurlOption.SslVerifyhost, false); easy.SetOpt(CurlOption.SslVerifyPeer, false); } var proxy = config.GetProxyUrl(); if (proxy != null) { easy.SetOpt(CurlOption.HttpProxyTunnel, 1); easy.SetOpt(CurlOption.Proxy, proxy); var authString = config.GetProxyAuthString(); if (authString != null) { easy.SetOpt(CurlOption.ProxyUserPwd, authString); } } easy.Perform(); if (easy.LastErrorCode != CurlCode.Ok) { var message = "Error " + easy.LastErrorCode.ToString() + " " + easy.LastErrorDescription + " " + easy.ErrorBuffer; if (null != OnErrorMessage) { OnErrorMessage(message); } else { Console.WriteLine(message); } } } var headerBytes = Combine(headerBuffers.ToArray()); var headerString = Encoding.UTF8.GetString(headerBytes); if (config.GetProxyUrl() != null) { var firstcrlf = headerString.IndexOf("\r\n\r\n"); var secondcrlf = headerString.IndexOf("\r\n\r\n", firstcrlf + 1); if (secondcrlf > 0) { headerString = headerString.Substring(firstcrlf + 4, secondcrlf - (firstcrlf)); } } var headerParts = headerString.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries); var headers = new List <string[]>(); var headerCount = 0; HttpStatusCode status = HttpStatusCode.NotImplemented; var cookieBuilder = new StringBuilder(); var cookies = new List <Tuple <string, string> >(); foreach (var headerPart in headerParts) { if (headerCount == 0) { var split = headerPart.Split(' '); if (split.Length < 2) { throw new Exception("HTTP Header missing"); } var responseCode = int.Parse(headerPart.Split(' ')[1]); status = (HttpStatusCode)responseCode; } else { var keyVal = headerPart.Split(new char[] { ':' }, 2); if (keyVal.Length > 1) { var key = keyVal[0].ToLower().Trim(); var value = keyVal[1].Trim(); if (key == "set-cookie") { var nameSplit = value.IndexOf('='); if (nameSplit > -1) { var cKey = value.Substring(0, nameSplit); var cVal = value.Split(';')[0] + ";"; cookies.Add(new Tuple <string, string>(cKey, cVal)); } } else { headers.Add(new[] { key, value }); } } } headerCount++; } foreach (var cookieGroup in cookies.GroupBy(c => c.Item1)) { cookieBuilder.AppendFormat("{0} ", cookieGroup.Last().Item2); } // add some debug output to track down the problem causing people getting InternalServerError results if (status == HttpStatusCode.NotImplemented || status == HttpStatusCode.InternalServerError) { try { OnErrorMessage("got NotImplemented/InternalServerError"); OnErrorMessage("request.Method: " + curlRequest.Method); OnErrorMessage("request.Url: " + curlRequest.Url); OnErrorMessage("request.Cookies: " + curlRequest.Cookies); OnErrorMessage("request.Referer: " + curlRequest.Referer); OnErrorMessage("request.RawPOSTDdata: " + curlRequest.RawPOSTDdata); OnErrorMessage("cookies: " + cookieBuilder.ToString().Trim()); OnErrorMessage("headerString:\n" + headerString); foreach (var headerPart in headerParts) { OnErrorMessage("headerParts: " + headerPart); } } catch (Exception ex) { OnErrorMessage(string.Format("CurlHelper: error while handling NotImplemented/InternalServerError:\n{0}", ex)); } } var contentBytes = Combine(contentBuffers.ToArray()); var curlResponse = new CurlResponse(headers, contentBytes, status, cookieBuilder.ToString().Trim()); return(curlResponse); } }
public static async Task <CurlResponse> PerformCurlAsync(CurlRequest curlRequest) { return(await Task.Run(() => PerformCurl(curlRequest))); }
public static async Task <CurlResponse> PerformCurlAsync(CurlRequest curlRequest, ServerConfig config) { return(await Task.Run(() => PerformCurl(curlRequest, config))); }
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; }
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); }
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); } if (Startup.DoSSLFix == true) { // http://stackoverflow.com/questions/31107851/how-to-fix-curl-35-cannot-communicate-securely-with-peer-no-common-encryptio // https://git.fedorahosted.org/cgit/mod_nss.git/plain/docs/mod_nss.html easy.SslCipherList = SSLFix.CipherList; easy.FreshConnect = true; easy.ForbidReuse = true; } easy.Perform(); if(easy.LastErrorCode != CurlCode.Ok) { var message = "Error " + easy.LastErrorCode.ToString() + " " + easy.LastErrorDescription; if (null != OnErrorMessage) OnErrorMessage(message); else Console.WriteLine(message); } } 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; var cookieBuilder = new StringBuilder(); foreach (var headerPart in headerParts) { if (headerCount == 0) { var split = headerPart.Split(' '); if (split.Length < 2) throw new Exception("HTTP Header missing"); var responseCode = int.Parse(headerPart.Split(' ')[1]); status = (HttpStatusCode)responseCode; } else { var keyVal = headerPart.Split(new char[] { ':' }, 2); if (keyVal.Length > 1) { var key = keyVal[0].ToLower().Trim(); var value = keyVal[1].Trim(); if (key == "set-cookie") { cookieBuilder.AppendFormat("{0} ", value.Substring(0, value.IndexOf(';') + 1)); } else { headers.Add(new[] { key, value }); } } } headerCount++; } var contentBytes = Combine(contentBuffers.ToArray()); var curlResponse = new CurlResponse(headers, contentBytes, status, cookieBuilder.ToString().TrimEnd()); return curlResponse; } }