2012-03-22 85 views
1

我正在嘗試進行cURL調用以下載CSV文件,並且獲取登錄頁面html。這裏是代碼:來自控制檯應用程序的cURL調用C#

WebRequest myRequest = WebRequest.Create("https://website.com/medias/823533/events.csv"); 
     myRequest.Credentials = new NetworkCredential("username", "password"); 
     myRequest.Method = "GET"; 
     myRequest.PreAuthenticate = true; 
     // Return the response. 
     WebResponse myResponse = myRequest.GetResponse(); 
     StreamReader sr = new StreamReader(myResponse.GetResponseStream()); 
     string result = sr.ReadToEnd(); 
     sr.Close(); 
     Console.WriteLine(result); 
     Console.ReadLine(); 

在C#中有一個簡單的cURL方法嗎?無論我嘗試什麼,這似乎都不起作用。

+4

這不捲曲,取而代之的則是一個[WebRequest的(http://msdn.microsoft.com/en-us/library/system.net .webrequest.aspx)。你有什麼錯誤嗎?它怎麼不起作用? – drew010 2012-03-22 18:36:14

+0

當你說cURL你的意思是像[使用Phalanger捲曲](http://stackoverflow.com/questions/1707053/using-curl-with-phalanger)或你的意思是cURL c#equivilent – 2012-03-22 18:44:14

+0

我發現這個問題,用戶名中的@符號必須轉換爲Base64,一旦網站允許我在7個小時內回答我自己的問題,我就會發布代碼... :) – 2012-03-22 19:07:15

回答

1

我發現了這個問題。顯然,當您在用戶名字段中傳遞「@」符號(如電子郵件用戶名)時,請求會失敗,因此它必須轉換爲基本64字符串。下面是代碼只是櫃面別人運行到這一點:

 string url = "https://website.com/events.csv"; 
     WebRequest myReq = WebRequest.Create(url); 

     string username = "username"; 
     string password = "password"; 
     string usernamePassword = username + ":" + password; 
     CredentialCache mycache = new CredentialCache(); 
     mycache.Add(new Uri(url), "Basic", new NetworkCredential(username, password)); 
     myReq.Credentials = mycache; 
     myReq.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes(usernamePassword))); 

     WebResponse wr = myReq.GetResponse(); 
     Stream receiveStream = wr.GetResponseStream(); 
     StreamReader reader = new StreamReader(receiveStream, Encoding.UTF8); 
     string content = reader.ReadToEnd(); 
     Console.WriteLine(content); 
     Console.ReadLine();