これは私が試したものです:
curl http://git.ep.petrobras.com.br/api/v3/session --data-urlencode 'login=myUser&password=myPass'
回答:
{"message":"401 Unauthorized"}
問題はdata-urlencode
CURLオプション。これはHTTPなので、POSTでデータをURLエンコードする必要はなく、実際には&
から&
と問題を引き起こしています。代わりに--data
オプション。
curl http://git.ep.petrobras.com.br/api/v3/session --data 'login=myUser&password=myPass'
また、プレーンHTTP経由で資格情報を送信する場合は注意してください。簡単に盗聴できます。
こうやって:
$ curl http://git.ep.petrobras.com.br/api/v3/session/ --data-urlencode 'login=myUser' --data-urlencode 'password=myPass'
ユーザー名またはパスワードにurleencodeする必要のある文字が含まれている場合、Stevenが指摘した解決策は機能しません。 name=content
形式はcontent
部分をurlencodeします(name
部分はurlencodeする必要がありますが、login
とpassword
は問題ありません)。
実際にprivate_token
を取得するには、次のようにcurlの出力をjqにパイプできます。
$ curl [as above] | jq --raw-output .private_token
x_the_private_token_value_x
これにより、シェルスクリプトで簡単に使用できます。
また、スティーブンがすでに指摘したように、パスワードがクリアテキストで送信されないように、代わりにhttpsを使用してください。
注:デフォルトのパスワードが削除されているため、このワークフローはGitLab 8.6.0以降では機能しません。
変更ログ: https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CHANGELOG#L205
私はこれに気づいただけで問題を提起しました。このメモをここに残して、誰か他の人の時間を節約できればと思います。うまくいけば、これはレビューされ、元に戻される決定です。
ディスカッション/問題: https://gitlab.com/gitlab-org/gitlab-ce/issues/198