ddo.jp に対してPowerShell で更新をかけようというもの。
HTTPでクエリストリング付きのGETを送る
PowerShell から WebClient クラスを使ってクエリ文字列をくっつけたGETはどうすればいいのか。
単純にくっつけてみる
[sourcecode language='sh']# 引数格納、URL形式
param([string]$url)
# 途中で例外を吐いたらここに飛び、抜ける
trap [Exception] {
echo $error[0].exception
break
}
# クエリ文字列を作成
$query = "?dn=hoge.example.jp&pw=piyopiyo"
# .NetFramework の WebClient クラスを拝借
$webCli = New-Object System.Net.WebClient
# コンテンツを取得、無理やりくっつけてみる
$body = $webCli.DownloadString($url + $query)
[/sourcecode]
で、実行してHTTPで送られている内容をキャプチャ。※テストなのでhostヘッダが "sawano.members.icraft.jp"
GET /index.html?dn=hoge.example.jp&pw=piyopiyo HTTP/1.1
Host: sawano.members.icraft.jp
Connection: Keep-Alive
あら、これでも送れてるのね。
しかし釈然としない、WebClient クラスには QueryString とかいうプロパティがあるみたいので、それを使うのが普通っぽい。
WebClient.QueryString で
はて、QueryString を設定するにはどうしたらいいのかね。
連想配列で突っ込んでみたら、案の定怒られた。
[sourcecode language='sh']# 連想配列でクエリの内容を設定してみる
$query = @{dn = "hoge.example.jp";pw = "piyopiyo"}
$query
# .NetFramework の WebClient クラスを拝借
$webCli = New-Object System.Net.WebClient
$webCli.QueryString = $query[/sourcecode]
Name Value
---- -----
dn hoge.example.jp
pw piyopiyo
"QueryString" の設定中に例外が発生しました:
""System.Collections.Hashtable" を
"System.Collections.Specialized.NameValueCollection" に変換できません。"
---- -----
dn hoge.example.jp
pw piyopiyo
"QueryString" の設定中に例外が発生しました:
""System.Collections.Hashtable" を
"System.Collections.Specialized.NameValueCollection" に変換できません。"
ほう、左様か。NameValueCollection ってのを使えばいいの?
[sourcecode language='sh']# 引数格納、URL形式
param([string]$url)
# 途中で例外を吐いたらここに飛び、抜ける
trap [Exception] {
echo $error[0].exception
break
}
# NameValueCollection をマニュアル通り定義してみる
$query = New-Object System.Collections.Specialized.NameValueCollection
$query.add( "dn", "hoge.example.jp" )
$query.add( "pw", "piyopiyo" )
# .NetFramework の WebClient クラスを拝借
$webCli = New-Object System.Net.WebClient
# WebClient の QueryString プロパティを設定
$webCli.QueryString = $query
# コンテンツを取得
$body = $webCli.DownloadString($url)[/sourcecode]
で、実行とHTTPキャプチャ。
GET /index.html?dn=hoge.example.jp&pw=piyopiyo HTTP/1.1
Host: sawano.members.icraft.jp
Connection: Keep-Alive
できたようだ。
これでややこしそうなところは一通り準備がそろった。イベントログ書き出し・メールくらいは如何様にでもなろう。
終わりにしようかどうしようか。