#author("2018-04-23T23:57:35+09:00","","")
#navi(../)
* PowerShellでHTTPのPOSTをする方法 [#i7116639]
本記事は、PowerShellのInvoke-WebRequestコマンドレットを使って、HTTPのPOSTを実現する記事になります。~
PowerShellからPOSTしたいのだけど…と思われている方、本資料が参考になると思います。~
JSONやXMLで返却されるのであれば、Invoke-RestMethodを使用するのも良いと思います。~

#contents
#htmlinsertpcsp(win-top.html,win-sp.html)

* 関連記事 [#ob065105]
-[[PowerShellでwgetやcurlのようにウェブページを取得する方法>PowerShell/wgetやcurlのようにウェブページを取得する]]
-[[PowerShellでHTTPのPOSTを実現する方法>PowerShell/HTTPのPOSTをする方法]]



* POSTするためのWebサーバを用意 [#if5a27c9]
以下のPHPスクリプトをPHPが動作するサーバに設置して動作確認を行いました。~
POSTされたaとbを足し算するだけの簡単なスクリプトです。
#ref(post.php)
 <?php
 $a = $_POST["a"];
 $b = $_POST["b"];
 $c = $a + $b;
 echo $c
 ?>
POSTされた値を足し算し、合計値を表示するPHPスクリプトになります。

* PowerShellでPOSTしてみる [#cfbcd176]
上記のphpスクリプトを配置し、PowerShellからPOSTした結果は以下の通りです。
+ POSTするパラメータをハッシュに指定。
 PS C:\> $postParams = @{a="1"; b="2"}
+設定したハッシュの確認
 PS C:\> $postParams
 
 Name                           Value
 ----                           -----
 a                              1
 b                              2
+post.phpを指定したサーバのURLを指定し、以下のようにして実行
 PS C:\> Invoke-WebRequest http://localhost/post.php -Method POST -Body $postParams
+上記のコマンドを実行すると、POSTしてサーバから返却された情報が表示されます。
  StatusCode        : 200
 StatusDescription : OK
 Content           : 3
 
 RawContent        : HTTP/1.1 200 OK
                     Connection: keep-alive
                     Content-Length: 2
                     Content-Type: text/html; charset=UTF-8
                     Date: Mon, 23 Apr 2018 14:44:43 GMT
                     Server: Apache
                     X-Powered-By: PHP/5.6.21
 
                     3
 
 Forms             : {}
 Headers           : {[Connection, keep-alive], [Content-Length, 2], [Content-Type, text/html; charset=UTF-8], [Date, Mo
                     n, 23 Apr 2018 14:44:43 GMT]...}
 Images            : {}
 InputFields       : {}
 Links             : {}
 ParsedHtml        : mshtml.HTMLDocumentClass
 RawContentLength  : 2
+実際に計算された情報のみ(content部分)のみ取り出すと、足し算されて合計値が取得できているのが確認できます。
 PS C:\> (Invoke-WebRequest http://just4fun.biz/fol/post.php -Method POST -Body $postParams).content
 3

したがって、以下の構文で簡単にPOSTすることができます。
 Invoke-WebRequest サーバURL -Method POST -Body パラメータ
または
 Invoke-WebRequest -Uri サーバURL -Method POST -Body パラメータ

上記ではパラメータとなる情報を変数に設定し、Invoke-WebRequestコマンドレットに渡していましたが、~
以下のように一行で書くことも可能です。
 PS C:\> (Invoke-WebRequest -Uri http://localhost/post.php -Method POST -Body @{"a"="8";"b"="7"}).content
 15

以上、PowerShellのInvoke-WebRequestコマンドレットを使って簡単にPOSTできる方法の紹介でした。

#htmlinsertpcsp(win-btm.html,win-sp.html)


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS