Я пытаюсь получить доступ к API BitBucket с помощью C #.Я могу выполнять некоторые действия, но не другие.Примечательно, что запись в репозитории работает, но чтение их не дает.
using System.Net;
using System.Collections.Specialized;
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; // TLS v1.2 only
var client = new WebClient()
{
Credentials = new NetworkCredential("user", "app_password"),
BaseAddress = "https://api.bitbucket.org",
};
client.DownloadString(
"/2.0/repositories/friendly_private_account/repo"); // 403 Forbidden
client.DownloadString(
"/2.0/repositories/friendly_private_account/repo/src"); // 403 Forbidden
client.UploadValues(
"/2.0/repositories/friendly_private_account/repo/src",
new NameValueCollection() {
{ "/bb.txt", "here is\nsome content\n" },
{ "message", "Commit from API, called with C# WebClient" },
}); // Creates a commit! What!?
Это немного странно, поскольку вы получаете разрешение read
автоматически, есливы включаете разрешение write
при создании пароля приложения.
Это также не проблема для DownloadString()
.Если пароль приложения имеет разрешение webhook
, вы можете прочитать веб-хуки.
client.DownloadString(
"/2.0/repositories/friendly_private_account/repo/hooks");
// {"pagelen": 10, "values": [{ … }]}
Интересно, что у curl
нет проблем с теми же учетными данными.
$ curl --user "${user}:${app_password}" \
--url "https://api.bitbucket.org/2.0/repositories/friendly_private_account/repo"
# {"scm": "git", "website": "", "has_wiki": false, … }
Выполнение curl
с --verbose
фактически вернет заголовки, которые описывают, какие разрешения имеют ваши учетные данные и , какие разрешения требуются.В приведенном выше примере требуется repository
, а у меня repository:write
.Это не говорит о том, что у меня repository:read
, но, тем не менее, запрос выполнен успешно.