2013-03-14 33 views
8

Tôi thấy rằng con đường tải về cho một repo GitHub có dạngC# ví dụ về tải GitHub repo tin lập trình

https://github.com/{username}/{reponame}/archive/{branchname}.zip 

Đối với một repo tin, hiểu bạn cần cung cấp thông tin để tải về repo, bất cứ ai có thể cung cấp một ví dụ C# về làm thế nào để cung cấp một xác thực cơ bản HTTPS để tôi có thể tải về repo lập trình?

Cảm ơn,

Trả lời

0

với CURL:

curl -L -F "login=$USER" -F "token=$TOKEN" https://github.com/$USER/$REPO/$PKGTYPE/$BRANCHorTAG 

nơi $ TOKEN là mã thông báo API trong hồ sơ của github của bạn, không phải là một dấu hiệu OAuth2 sử dụng để giao tiếp với các APIv3.

$ USER là tài khoản người dùng mà mã thông báo được kết nối với, không nhất thiết là tổ chức/người dùng khác mà repo thuộc về. Trường hợp thứ hai của $ USER là tài khoản người dùng/tài khoản repo.

$ REPO là tên của kho tin

$ PKGTYPE là tarball hoặc zipball và $ BRANCHorTAG là một chi nhánh, giống như bậc thầy, hoặc một tên tag cho một cam kết.

Ví dụ đầu tiên của $ USER phải có quyền truy cập vào repo thuộc trường hợp thứ hai của $ USER.

Tôi không thể tìm thấy tài liệu này ở bất kỳ đâu, vì vậy tôi cũng có một chút viết về nó nếu bạn muốn bất cứ điều gì chi tiết hơn.

+1

Tôi biết bạn có thể sử dụng 'curl' từ các câu hỏi khác, nhưng tôi không thể giả định 'curl' được cài đặt trên máy tính, vì vậy phải sử dụng cơ bản .Net nguyên thủy không may. – theburningmonk

-1

Tôi đang xem xét Okctokit.Net hiện tại. Cho nó một shot. NuGet: Cài đặt-Package Octokit

4

Đây là một tinh khiết C# cách:

var githubToken = "[token]"; 
var url = "https://github.com/[username]/[repository]/archive/[sha1|tag].zip"; 
var path = @"[local path]"; 

using (var client = new System.Net.Http.HttpClient()) 
{ 
    var credentials = string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0}:", githubToken); 
    credentials = Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(credentials)); 
    client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", credentials); 
    var contents = client.GetByteArrayAsync(url).Result; 
    System.IO.File.WriteAllBytes(path, contents); 
} 
+0

Tôi nhận ra đây là một câu trả lời rất cũ, nhưng tôi đang gặp khó khăn khi nhận được nó để làm việc; nó luôn trả về 404 ngay cả khi nó tải xuống bình thường khi tôi nhập url vào trình duyệt. Có cái gì tôi đang mất tích? –

0

sử dụng một mã thông báo github (https://help.github.com/articles/creating-an-access-token-for-command-line-use)

 var githubToken = "token"; 
     var request = (HttpWebRequest)WebRequest.Create("https://api.github.com/repos/$OWNER/$REPO/contents/$PATH"); 
     request.Headers.Add(HttpRequestHeader.Authorization, string.Concat("token ", githubToken)); 
     request.Accept = "application/vnd.github.v3.raw"; 
     request.UserAgent = "test app"; //user agent is required https://developer.github.com/v3/#user-agent-required 
     using (var response = request.GetResponse()) 
     { 
      var encoding = System.Text.ASCIIEncoding.UTF8; 
      using (var reader = new System.IO.StreamReader(response.GetResponseStream(), encoding)) 
      { 
       var fileContent = reader.ReadToEnd(); 
      } 
     }