[PYTHON] Laden Sie den unformatierten Link des privaten GitLab-Repositorys mit CLI herunter

Download gitlab private repository's raw link using CLI

Ab GitLab 11.5.1 können Sie keine Raw-Links mehr über den PRIVATE-TOKEN-Header herunterladen (siehe https://about.gitlab.com/releases/2018/11/28/security-release-gitlab-11) -dot-5-dot-1-freigegeben / Unsachgemäße Durchsetzung des Token-Bereichs). Als der unformatierte Link übergeben wurde, habe ich die URL analysiert und konvertiert, damit ich auch die Datei selbst herunterladen kann.

#!/usr/bin/python
#gitlab_download

import os
import sys
import json
import shutil
from contextlib import closing

if sys.version_info[0]>=3:
    import http.client as httplib
    from urllib.request import urlparse
    binstdout = sys.stdout.buffer
else:
    import httplib
    from urlparse import urlparse
    binstdout = sys.stdout

url = urlparse(sys.argv[1])
a=url.path[1:].split('/')
projname='/'.join([a[0],a[1]])
revision=a[3]
filepath='%2F'.join(a[4:])

token = os.environ.get('gitlab_token_'+url.hostname.replace('.','_'),'')

with closing(httplib.HTTPSConnection(url.hostname,port=url.port)) as https:
    https.request('GET','/api/v4/projects?search_namespaces=true&search='+projname,None,{'PRIVATE-TOKEN':token})
    resp = https.getresponse()
    jso = json.loads(resp.read())
    proj = next(e for e in jso if e['path_with_namespace']==projname)
    resolvedPath = '/api/v4/projects/'+str(proj['id'])+'/repository/files/'+filepath.replace('/','%2F')+'/raw?ref='+revision
    sys.stderr.write('resolved: https://%s%s\n'%(url.netloc,resolvedPath))
    https.request('GET',resolvedPath,None,{'PRIVATE-TOKEN':token})
    resp = https.getresponse()
    #print(resp.getheaders())
    shutil.copyfileobj(resp,binstdout)

200602

Beim Konvertieren vom Projektnamen in die Projekt-ID wurde geändert, um "search_namespaces = true" anzugeben.

Recommended Posts

Laden Sie den unformatierten Link des privaten GitLab-Repositorys mit CLI herunter
Laden Sie die mit appcfg.py bereitgestellte Datei herunter
Führen Sie IDCF Cloud CLI auf Docker aus
Richten Sie die Größe der Farbleiste an der Matplotlib aus
Überprüfen Sie die Existenz der Datei mit Python
Laden Sie mit Python Dateien im Web herunter
Die dritte Nacht der Runde mit für
Die zweite Nacht der Runde mit für
Erstellen Sie ein privates Repository mit AWS CodeArtifact
Laden Sie die Datei mit PHP herunter [Im Aufbau]
Zählen Sie die Anzahl der Zeichen mit Echo