public async Task <Stream> GetGroovesharkStream(string groovesharkUrl) { await Load(); string streamUrl; GroovesharkApi.GroovesharkResult parameters; HttpProxy proxy = null; if (await GroovesharkApi.IsProxyRequired()) { proxy = await ProxyManager.Instance.GetWebProxy(); } using (var p = new Process { StartInfo = new ProcessStartInfo { CreateNoWindow = true, RedirectStandardOutput = true, UseShellExecute = false, FileName = "youtube-dl.exe", Arguments = string.Format("-g {0}{1} -j", groovesharkUrl, proxy != null ? string.Format(" --proxy \"{0}\"", proxy) : null) } }) { p.Start(); streamUrl = await p.StandardOutput.ReadLineAsync(); parameters = JsonConvert.DeserializeObject <GroovesharkApi.GroovesharkResult>(await p.StandardOutput.ReadToEndAsync()); } if (string.IsNullOrEmpty(streamUrl)) { Debug.Print("invalid proxy: " + proxy); ProxyManager.Instance.AddInvalid(proxy); return(await GetGroovesharkStream(groovesharkUrl)); } Debug.Print("everything is awesome"); var data = Encoding.ASCII.GetBytes(parameters.HttpPostData); var request = (HttpWebRequest)WebRequest.Create(streamUrl); request.Headers.Add("Accept-Charset", parameters.HttpHeaders.AcceptCharset); request.Headers.Add("Accept-Language", parameters.HttpHeaders.AcceptLanguage); request.Headers.Add("Accept-Encoding", parameters.HttpHeaders.AcceptEncoding); request.Headers.Add("Cookie", parameters.HttpHeaders.Cookie); request.Method = "POST"; request.ContentType = parameters.HttpHeaders.ContentType; request.ContentLength = data.Length; request.UserAgent = parameters.HttpHeaders.UserAgent; request.Accept = parameters.HttpHeaders.Accept; request.Proxy = proxy != null?proxy.ToWebProxy() : null; var requestStream = request.GetRequestStream(); requestStream.Write(data, 0, data.Length); requestStream.Close(); var myHttpWebResponse = (HttpWebResponse)request.GetResponse(); return(myHttpWebResponse.GetResponseStream()); }