Я подключаюсь к API BitBucket и хотел бы иметь возможность загрузить zip-файл репозитория на сервер. Из-за того, что репозитории являются частными, требуется доступ пользователя.
Я могу скачать файл, используя данные для входа в систему по ссылке:
https://{user}:{pass}@bitbucket.org/{owner_name}/{repository}/get/master.zip
Но я хотел бы иметь возможность загружать файл с помощью токена доступа через API, скорее всего, cURL или любым другим способом.
Я использовал эту функцию для загрузки репозитория из bitbucket:
function download($url, $destination) {
try {
$fp = fopen($destination, "w");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, USERNAME . ":" . PASSWORD);
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$resp = curl_exec($ch);
if(curl_errno($ch)){
throw new Exception(curl_error($ch), 500);
}
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status_code != 200) {
throw new Exception("Response with Status Code [" . $status_code . "].", 500);
}
}
catch(Exception $ex) {
if ($ch != null) curl_close($ch);
if ($fp != null) fclose($fp);
throw new Exception('Unable to properly download file from url=[' + $url + '] to path [' + $destination + '].', 500, $ex);
}
if ($ch != null) curl_close($ch);
if ($fp != null) fclose($fp);
}
Я обнаружил, что клонирование репозитория с использованием ssh работает отлично. Имея уже сгенерированный ключ ssh, а затем выполнив процедуру POST для ssh-ключа Bitbucket API, я могу использовать команды git без каких-либо ограничений. Мне также пришлось разрешить Bitbucket.org в файле .ssh / known_hosts получить доступ.
В целом, этот метод является лучшим и единственным способом, если вы хотите получить доступ к файлам src из репозиториев.