[解決済み] GitHub API の基本認証にユーザー名とパスワードを指定して Invoke-WebRequest を使用する
質問
cURLでは、以下のようにHTTPのWebリクエストでユーザ名を渡すことができます。
$ curl -u <your_username> https://api.github.com/user
は
-u
フラグは、認証のためのユーザ名を受け付け、その後、cURL はパスワードを要求します。cURL の例では
GitHub Api による基本認証
.
同様にInvoke-WebRequestでユーザー名とパスワードを渡すにはどうしたらよいでしょうか。最終的な目標は、GitHub API の Basic 認証で PowerShell を使いこなすことです。
どのように解決するのですか?
ここではBasic認証を想定しています。
$cred = Get-Credential
Invoke-WebRequest -Uri 'https://whatever' -Credential $cred
他の手段でクレデンシャルを取得することも可能です(
Import-Clixml
など)でなければなりません。
[PSCredential]
オブジェクトを作成します。
コメントを元に編集します。
GitHubはRFCを破っています。 リンク :
<ブロッククオートこのAPIは、RFC2617で定義されたBasic Authenticationをサポートしています。 が若干異なります。主な違いは、RFCでは 認証されていないリクエストには、401 Unauthorized というレスポンスが返ってきます。多くの場合、これはユーザーの存在を開示することになります。 のデータを使用します。その代わり、GitHub APIは404 Not Foundで応答します。これは 401 Unauthorizedを想定しているHTTPライブラリでは、問題が発生します。 レスポンスを返すことができます。解決策は、Authorizationヘッダを手動で作成することです。
Powershellの
Invoke-WebRequest
は、私の知る限りでは 401 レスポンスを待ってから認証情報を送信するようです。
手動でヘッダを構築する
代わりに、基本的な認証ヘッダを自分で作成する必要があります。
基本認証では、ユーザー名とパスワードをコロンで区切った文字列を受け取ります。
user:pass
をBase64でエンコードした結果を送信します。
このようなコードで動作するはずです。
$user = 'user'
$pass = 'pass'
$pair = "$($user):$($pass)"
$encodedCreds = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($pair))
$basicAuthValue = "Basic $encodedCreds"
$Headers = @{
Authorization = $basicAuthValue
}
Invoke-WebRequest -Uri 'https://whatever' -Headers $Headers
文字列の連結の一部を組み合わせてもいいのですが、わかりやすくするために分割してみました。
関連
-
UbuntuシステムでのPowerShellベースの利用を解説
-
PowerShellスクリプトでパスワードを保存する方法
-
オリジナルpowershellスクリプト gadget ctracert.ps1 trace route(win8+系)
-
Powershellスクリプトに電子署名を行う方法
-
特定のWebページに関する情報を取得するPowershellコード
-
CMDとWin powershellの違い
-
PowerShellパイプラインチュートリアル(パイプラインの例)
-
PowerShell は、現在のスクリプトランタイムによって消費されるメモリの動的フェッチを実装しています。
-
[解決済み] ベーシック認証における「レルム」とは
-
[解決済み】HTTP基本認証 - 期待されるWebブラウザの体験とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Android携帯のwifiプロキシを自動設定するPowerShellスクリプト
-
PowerShellのジョブ関連コマンドとタスクの並列実行の解説
-
UbuntuシステムでのPowerShellベースの利用を解説
-
win10のスタートメニューと通知センターが開けないのをpowershellで解決する。
-
PowerShellパイプラインチュートリアル(パイプラインの例)
-
ADユーザーのパスワード属性を一括で変更するPowerShellコード
-
PowerShell 配列の複数の入力メソッド
-
PowerShellで現在実行中のスクリプトのパスを取得する方法
-
PowerShellファイル同期スクリプトを共有
-
PowerShellでプログラム的にIEのキャッシュを空にする