2017-11-14 8 views
0

私はPythonリクエストを使ってGitLabビルドをトリガーしようとしています。通常、curlコマンドでビルドを開始できます。PythonリクエストでGitLabをビルドする

例curlコマンド:

curl -X POST \ 
    -F token=TOKEN \ 
    -F ref=master \ 
    -F "variables[UPLOAD_TO_S3]=true" \ 
    https://gitlab.example.com/api/v4/projects/9/trigger/pipeline 

私はshモジュールを使用してこの作業を取得することができますが、私はrequestsを使用して好みます。私は次のようにバリエーションを試してみた:私はとheadersのparamなしで試してみました

data = { 
    'token': token, 
    'ref': master, 
    'variables[UPLOAD_TO_S3]': str(uploadS3), 
} 

headers = {'Content-Type': 'application/json'} 
result = requests.post(_trigger_url, headers=headers, json=data) 

。私はまた、paramsjsonfiles、およびdataを使用してdataディクテーションを渡そうとしました。すべて400または404のエラーが返ってきます。助言がありますか?

答えて

1

data dictをdata引数として渡すだけで、要求の一部としてContent-Type: "application/json"ヘッダーを送信しないでください。フォームのエンコードが必要です。

私のGitlabインスタンスへのリクエストは成功し、プロジェクトのマスターブランチのビルドをトリガーします。

In [3]: rsp 
Out[3]: <Response [201]> 

あなたはまたPOSTを送信し、URL自体にtokenref含めることによって、パイプラインをトリガすることができるはずです。

rsp = requests.post('https://gitlab.instance/api/v4/projects/PROJECT_ID/trigger/pipeline', 
      data={'token': '125fdsfdf1ab3631d2423434347643', 'ref': 'master'}) 

ここで、出力は私がipython `の私のrspオブジェクトを検査している場合です。

rsp = requests.post('https://gitlab.instance/api/v4/projects/PROJECT_ID/trigger/pipeline?token=TOKEN&ref=master') 

IはContent-Type: "application/json"ヘッダを渡すと、Gitlabは、HTTP/400エラーで応答します。

+0

あなたは何をヘッダに渡していますか?私がヘッダー引数を完全に取り除くと、404エラーが発生します。 –

+0

@JaySoyer私は明示的にヘッダを渡すわけではありません。私が示した行はビルドをトリガするために実行した唯一のものです( 'import requests'以外に)。 '{'User-Agent': 'python-requests/2.18.4'、 'Accept-Encoding': 'gzip、deflate'、 'Accept': '*/*'、 ' 'Content-Length': '47'、 'C​​ontent-Type': 'アプリケーション/ x-www-form-urlencoded'} 'のように、 – birryree

+0

あなたの例の行では、明示的にヘッダを渡しています...これが私が尋ねた理由です。私の自動ヘッダは、python-requests 2.18.3を使用している以外は同じように見えます。 –

関連する問題