用C#调用cURL

我需要执行cURL请求以从Web获取CSV文件。 我之前从未使用过cURL,到目前为止,我通过谷歌看到的东西似乎没有意义:

cURL调用需要如下所示:

curl --user username:password http://somewebsite.com/events.csv 

我试图使用的代码(我使用它来获取基本的auth XML文件)

 string URL = "http://somewebsite.com/events.csv"; string Username = "username"; string Password = "password"; WebClient req = new WebClient(); CredentialCache myCache = new CredentialCache(); myCache.Add(new Uri(URL), "Basic", new NetworkCredential(Username, Password)); req.Credentials = myCache; string results = null; results = Encoding.UTF8.GetString(req.DownloadData(URL)); 

这只是让我返回登录屏幕的html,因此身份validation不会发生。

我发现了这个问题。 显然,当您在用户名字段中传递@符号(如电子邮件用户名)时,请求将失败,因此必须将其转换为基本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(); 

看起来您正在尝试使用BasicAuth协议登录网站? 如果您使用登录屏幕获取HTML页面,则该站点不使用BasicAuth。 BasicAuth是您很少看到的那些旧式URL:

 username:password@http://somewebsite.com/events.csv 

使用BasicAuth,您的浏览器会通过一个小弹出窗口处理身份validation。

要使用curl访问此站点,您需要访问登录页面,填写表单,提交或validationcookie,令牌或其他方法。