PowerShellでは、Webのリクエストを実行するコマンドレットがあります。
それらを使う際、セッション情報をリクエストで引き継ぐ方法を書きます。
用途
PowerShellで、ログイン→何らかのリクエスト→ログアウトのような処理をする際、ログインで得たセッションを引き継いで利用する。
対象のコマンドレット
コマンド名 | 処理 | 公式 |
---|---|---|
Invoke-WebRequest |
ヘッダー等がついた、そのままのHTMLを返す | リンク |
Invoke-RestMethod |
レスポンスがJSON等なら、その状態で返す | リンク |
どちらも、リクエストを実行して、結果を取得する点では共通です。
例として、Invoke-RestMethod
を使用しますが、どちらのコマンドレットでも使用できます。
セッションの取得
ログインのAPIを呼び出すとします。下記のURL等は適当で、随時読み替えてください。
また、ログイン処理は、JSON
でユーザーID等を渡すものとします。
# ルートのURL
$hostUrl = "https://hogeService.com/"
# ログインAPIのパス
$login = "rest/login"
$hosturi = New-Object System.Uri ($hostUrl)
$url = New-Object System.Uri ($hosturi, $login)
# ログイン情報
$inputs = @{
username = "userName";
password = "pass";
}
$json = $inputs | ConvertTo-Json;
$headers = @{ #何かあれば }
$res = Invoke-RestMethod -uri $url.AbsoluteUri `
-Method Post `
-Body $json `
-ContentType "application/json" `
-Headers $headers `
-SessionVariable loginSession # loginSessionに、セッション情報が格納される
-SessionVariable
を付与し、上記のように書くと、$loginSession
という変数が使えるようになります。これがセッションです。
##セッションを使う
次のリクエストに、セッションを付加します。
# 処理APIのパス
$search = "rest/search"
$url = New-Object System.Uri ($hosturi, $search)
# 検索情報
$inputs = @{
date = Get-Date -Format "yyyy-MM-dd";
title = "hogehoge";
}
$json = $inputs | ConvertTo-Json;
$res = Invoke-RestMethod -uri $url.AbsoluteUri `
-Method Get `
-Body $json `
-ContentType "application/json" `
-Headers $headers `
-WebSession $loginSession
渡すときは、-WebSession
パラメータを使います。
利用上の注意
REST API
を呼び出す場合は、そのAPI仕様をよく見ましょう。
そこに、セッションを渡すとか、ログインの戻り値の一部をヘッダーに含めろ等の指示があると思います。
それを見て、セッションを渡せ、と書いてある場合は、上のようにしてセッションを引き渡しましょう。