private static async Task <CurlResponse> FollowRedirect(string url, CurlResponse response) { var uri = new Uri(url); string redirect; if (response.Headers.TryGetValue("location", out redirect)) { string cookie = response.CookieHeader; if (!redirect.StartsWith("http://") && !redirect.StartsWith("https://")) { if (redirect.StartsWith("/")) { redirect = string.Format("{0}://{1}{2}", uri.Scheme, uri.Host, redirect); } else { redirect = string.Format("{0}://{1}/{2}", uri.Scheme, uri.Host, redirect); } } var newRedirect = await GetAsync(redirect, cookie); foreach (var c in response.Cookies) { newRedirect.Cookies[c.Key] = c.Value; } newRedirect.AddCookiesFromHeaders(response.HeaderList); return(newRedirect); } else { return(response); } }
private void OnSiteResponse(CurlResponse curlResponse) { WindowProgress = (double)curlResponse.Index / Profile.PlayTimes; ResponseList.Insert(0, curlResponse); OnPropertyChanged("WindowProgress"); }
private void PollStatus(CurlResponse curlResponse) { var completed = false; while (!completed) { var jobStatusResult = this.GetSprintStatus(curlResponse.job_id); completed = jobStatusResult.status != "running" && jobStatusResult.status != "queued"; SprintStatusChanged(this, jobStatusResult); Thread.Sleep(2000); } }
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; } }
private static async Task<CurlResponse> FollowRedirect(string url, CurlResponse response) { var uri = new Uri(url); string redirect; if (response.Headers.TryGetValue("location", out redirect)) { string cookie = response.CookieHeader; if (!redirect.StartsWith("http://") && !redirect.StartsWith("https://")) { if (redirect.StartsWith("/")) redirect = string.Format("{0}://{1}{2}", uri.Scheme, uri.Host, redirect); else redirect = string.Format("{0}://{1}/{2}", uri.Scheme, uri.Host, redirect); } var newRedirect = await GetAsync(redirect, cookie); foreach (var c in response.Cookies) newRedirect.Cookies[c.Key] = c.Value; newRedirect.AddCookiesFromHeaders(response.HeaderList); return newRedirect; } else return response; }
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 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) { 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; } }
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, 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); } }