PowerShell HttpListenerを使ったローカルWebサーバを構築し、Net.HttpListenerを構成する各種オブジェクト(HttpListenerContext 等)のプロパティと設定値を一括で確認するためのサンプルコード

PowerShell

.netの HttpListener を使ったサーバ構築が面白そうなのでチャレンジ中だが、どういったデータ構造なのか、どんな値が入っているのか、ドキュメントだけだとなかなか創造できない。

そのため、 HttpListenerを使ったローカルWebサーバ のサンプルプログラムから、構成する各種オブジェクトのプロパティを 一括で確認するためのサンプルコードを作成した。

サンプルコード

使い方

  • サンプルコードをPowerShellに張り付けて実行する。
  • ブラウザからhttp://localhost:8000/ にアクセス
  • PowerShellのコンソール上に以下の実行結果が出力される。

実行結果

Windows10 Edgeから実行した場合

PS C:\Users\papanda925\Desktop\httpsv> c:\Users\papanda925\Desktop\httpsv\sampleSV.ps1
 ----  $listener  Start   ---- 
 ----  $listener  Property Count: 11  ---- 
1 $listener.AuthenticationSchemes : Anonymous
2 $listener.AuthenticationSchemeSelectorDelegate : 
3 $listener.DefaultServiceNames : HTTP/localhost HTTP/DESKTOP-AJDBM1N
4 $listener.ExtendedProtectionPolicy : ProtectionScenario=TransportSelected; PolicyEnforcement=Never; CustomChannelBinding=<null>; ServiceNames=<null>
5 $listener.ExtendedProtectionSelectorDelegate :
6 $listener.IgnoreWriteExceptions : False
7 $listener.IsListening : True
8 $listener.Prefixes : http://localhost:8000/
9 $listener.Realm :
10 $listener.TimeoutManager : System.Net.HttpListenerTimeoutManager
11 $listener.UnsafeConnectionNtlmAuthentication : False
 ----  $listener.TimeoutManager  Start   ---- 
 ----  $listener.TimeoutManager  Property Count: 6  ----
1 $listener.TimeoutManager.DrainEntityBody : 00:00:00
2 $listener.TimeoutManager.EntityBody : 00:00:00
3 $listener.TimeoutManager.HeaderWait : 00:00:00
4 $listener.TimeoutManager.IdleConnection : 00:00:00
5 $listener.TimeoutManager.MinSendBytesPerSecond : 0
6 $listener.TimeoutManager.RequestQueue : 00:00:00
 ----  $context  Start   ----
 ----  $context  Property Count: 3  ----
1 $context.Request : System.Net.HttpListenerRequest
2 $context.Response : System.Net.HttpListenerResponse
3 $context.User : 
 ----  $context.Request  Start   ----
 ----  $context.Request  Property Count: 29  ----
1 $context.Request.AcceptTypes : text/html application/xhtml+xml application/xml;q=0.9 image/webp image/apng */*;q=0.8 application/signed-exchange;v=b3;q=0.9
2 $context.Request.ClientCertificateError :
3 $context.Request.ContentEncoding : System.Text.DBCSCodePageEncoding
4 $context.Request.ContentLength64 : 0
5 $context.Request.ContentType : 
6 $context.Request.Cookies :
7 $context.Request.HasEntityBody : False
8 $context.Request.Headers : sec-ch-ua sec-ch-ua-mobile sec-ch-ua-platform Upgrade-Insecure-Requests Sec-Fetch-Site Sec-Fetch-Mode Sec-Fetch-User Sec-Fetch-Dest Cache-Control Connection Accept Accept-Encoding Accept-Language Host User-Agent
9 $context.Request.HttpMethod : GET
10 $context.Request.InputStream : System.IO.Stream+NullStream
11 $context.Request.IsAuthenticated : False
12 $context.Request.IsLocal : True
13 $context.Request.IsSecureConnection : False
14 $context.Request.IsWebSocketRequest : False
15 $context.Request.KeepAlive : True
16 $context.Request.LocalEndPoint : [::1]:8000
17 $context.Request.ProtocolVersion : 1.1
18 $context.Request.QueryString : 
19 $context.Request.RawUrl : /
20 $context.Request.RemoteEndPoint : [::1]:53699
21 $context.Request.RequestTraceIdentifier : 00000000-0000-0000-1700-0080010000fb
22 $context.Request.ServiceName : 
23 $context.Request.TransportContext : System.Net.HttpListenerRequestContext
24 $context.Request.Url : http://localhost:8000/
25 $context.Request.UrlReferrer : 
26 $context.Request.UserAgent : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36 Edg/93.0.961.47
27 $context.Request.UserHostAddress : [::1]:8000
28 $context.Request.UserHostName : localhost:8000
29 $context.Request.UserLanguages : ja en;q=0.9 en-GB;q=0.8 en-US;q=0.7
 ----  $context.Request.Url  Start   ---- 
 ----  $context.Request.Url  Property Count: 22  ---- 
1 $context.Request.Url.AbsolutePath : /
2 $context.Request.Url.AbsoluteUri : http://localhost:8000/
3 $context.Request.Url.Authority : localhost:8000
4 $context.Request.Url.DnsSafeHost : localhost
5 $context.Request.Url.Fragment :
6 $context.Request.Url.Host : localhost
7 $context.Request.Url.HostNameType : Dns
8 $context.Request.Url.IdnHost : localhost
9 $context.Request.Url.IsAbsoluteUri : True
10 $context.Request.Url.IsDefaultPort : False
11 $context.Request.Url.IsFile : False
12 $context.Request.Url.IsLoopback : True
13 $context.Request.Url.IsUnc : False
14 $context.Request.Url.LocalPath : /
15 $context.Request.Url.OriginalString : http://localhost:8000/
16 $context.Request.Url.PathAndQuery : /
17 $context.Request.Url.Port : 8000
18 $context.Request.Url.Query :
19 $context.Request.Url.Scheme : http
20 $context.Request.Url.Segments : /
21 $context.Request.Url.UserEscaped : False
22 $context.Request.Url.UserInfo : 
 ----  $context.Request.Headers  Start   ----
 ----  $context.Request.Headers  Property Count: 1  ---- 
1 $context.Request.Headers.Length : 9 16 18 25 14 14 14 14 13 10 6 15 15 4 10
 ----  $context.Request.InputStream  Start   ----
 ----  $context.Request.InputStream  Property Count: 8  ----
1 $context.Request.InputStream.CanRead : True
2 $context.Request.InputStream.CanSeek : True
3 $context.Request.InputStream.CanTimeout : False
4 $context.Request.InputStream.CanWrite : True
5 $context.Request.InputStream.Length : 0
6 $context.Request.InputStream.Position : 0
7 $context.Request.InputStream.ReadTimeout :
8 $context.Request.InputStream.WriteTimeout : 
 ----  $context.Request.TransportContext  Start   ---- 
 ----  $context.Request.TransportContext  Property Count: 0  ----
 ----  $context.Request.UrlReferrer  Is Null   ----
 ----  $context.Request.RequestTraceIdentifier  Start   ----
 ----  $context.Request.RequestTraceIdentifier  Property Count: 0  ----
 ----  $context.Request.ContentEncoding  Start   ---- 
 ----  $context.Request.ContentEncoding  Property Count: 14  ---- 
1 $context.Request.ContentEncoding.BodyName : iso-2022-jp
2 $context.Request.ContentEncoding.CodePage : 932
3 $context.Request.ContentEncoding.DecoderFallback : System.Text.InternalDecoderBestFitFallback
4 $context.Request.ContentEncoding.EncoderFallback : System.Text.InternalEncoderBestFitFallback
5 $context.Request.ContentEncoding.EncodingName : 日本語 (シフト JIS)
6 $context.Request.ContentEncoding.HeaderName : iso-2022-jp
7 $context.Request.ContentEncoding.IsBrowserDisplay : True
8 $context.Request.ContentEncoding.IsBrowserSave : True
9 $context.Request.ContentEncoding.IsMailNewsDisplay : True
10 $context.Request.ContentEncoding.IsMailNewsSave : True
11 $context.Request.ContentEncoding.IsReadOnly : True
12 $context.Request.ContentEncoding.IsSingleByte : False
13 $context.Request.ContentEncoding.WebName : shift_jis
14 $context.Request.ContentEncoding.WindowsCodePage : 932
 ----  $context.User  Is Null   ----
 ----  $context.Response  Start   ----
 ----  $context.Response  Property Count: 12  ---- 
1 $context.Response.ContentEncoding :
2 $context.Response.ContentLength64 : 0
3 $context.Response.ContentType : 
4 $context.Response.Cookies :
5 $context.Response.Headers : 
6 $context.Response.KeepAlive : True
7 $context.Response.OutputStream : System.Net.HttpResponseStream
8 $context.Response.ProtocolVersion : 1.1
9 $context.Response.RedirectLocation : 
10 $context.Response.SendChunked : False
11 $context.Response.StatusCode : 200
12 $context.Response.StatusDescription : OK
 ----  $context.Response.OutputStream  Start   ----
 ----  $context.Response.OutputStream  Property Count: 8  ---- 
1 $context.Response.OutputStream.CanRead : False
2 $context.Response.OutputStream.CanSeek : False
3 $context.Response.OutputStream.CanTimeout : False
4 $context.Response.OutputStream.CanWrite : True
5 $context.Response.OutputStream.Length :
6 $context.Response.OutputStream.Position : 
7 $context.Response.OutputStream.ReadTimeout :
8 $context.Response.OutputStream.WriteTimeout :
 ----  $listener  Start   ---- 
 ----  $listener  Property Count: 11  ----
1 $listener.AuthenticationSchemes : Anonymous
2 $listener.AuthenticationSchemeSelectorDelegate : 
3 $listener.DefaultServiceNames : HTTP/localhost HTTP/DESKTOP-AJDBM1N
4 $listener.ExtendedProtectionPolicy : ProtectionScenario=TransportSelected; PolicyEnforcement=Never; CustomChannelBinding=<null>; ServiceNames=<null>
5 $listener.ExtendedProtectionSelectorDelegate :
6 $listener.IgnoreWriteExceptions : False
7 $listener.IsListening : True
8 $listener.Prefixes : http://localhost:8000/
9 $listener.Realm : 
10 $listener.TimeoutManager : System.Net.HttpListenerTimeoutManager
11 $listener.UnsafeConnectionNtlmAuthentication : False
 ----  $listener.TimeoutManager  Start   ----
 ----  $listener.TimeoutManager  Property Count: 6  ----
1 $listener.TimeoutManager.DrainEntityBody : 00:00:00
2 $listener.TimeoutManager.EntityBody : 00:00:00
3 $listener.TimeoutManager.HeaderWait : 00:00:00
4 $listener.TimeoutManager.IdleConnection : 00:00:00
5 $listener.TimeoutManager.MinSendBytesPerSecond : 0
6 $listener.TimeoutManager.RequestQueue : 00:00:00
 ----  $context  Start   ----
 ----  $context  Property Count: 3  ----
1 $context.Request : System.Net.HttpListenerRequest
2 $context.Response : System.Net.HttpListenerResponse
3 $context.User :
 ----  $context.Request  Start   ----
 ----  $context.Request  Property Count: 29  ---- 
1 $context.Request.AcceptTypes : image/webp image/apng image/svg+xml image/* */*;q=0.8    
2 $context.Request.ClientCertificateError :
3 $context.Request.ContentEncoding : System.Text.DBCSCodePageEncoding
4 $context.Request.ContentLength64 : 0
5 $context.Request.ContentType : 
6 $context.Request.Cookies :
7 $context.Request.HasEntityBody : False
8 $context.Request.Headers : sec-ch-ua sec-ch-ua-mobile sec-ch-ua-platform Sec-Fetch-Site 
Sec-Fetch-Mode Sec-Fetch-Dest Cache-Control Connection Pragma Accept Accept-Encoding Accept-Language Host Referer User-Agent
9 $context.Request.HttpMethod : GET
10 $context.Request.InputStream : System.IO.Stream+NullStream
11 $context.Request.IsAuthenticated : False
12 $context.Request.IsLocal : True
13 $context.Request.IsSecureConnection : False
14 $context.Request.IsWebSocketRequest : False
15 $context.Request.KeepAlive : True
16 $context.Request.LocalEndPoint : [::1]:8000
17 $context.Request.ProtocolVersion : 1.1
18 $context.Request.QueryString :
19 $context.Request.RawUrl : /favicon.ico
20 $context.Request.RemoteEndPoint : [::1]:53699
21 $context.Request.RequestTraceIdentifier : 00000000-0000-0000-1800-0080010000fb
22 $context.Request.ServiceName :
23 $context.Request.TransportContext : System.Net.HttpListenerRequestContext
24 $context.Request.Url : http://localhost:8000/favicon.ico
25 $context.Request.UrlReferrer : http://localhost:8000/
26 $context.Request.UserAgent : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36 Edg/93.0.961.47
27 $context.Request.UserHostAddress : [::1]:8000
28 $context.Request.UserHostName : localhost:8000
29 $context.Request.UserLanguages : ja en;q=0.9 en-GB;q=0.8 en-US;q=0.7
 ----  $context.Request.Url  Start   ----
 ----  $context.Request.Url  Property Count: 22  ---- 
1 $context.Request.Url.AbsolutePath : /favicon.ico
2 $context.Request.Url.AbsoluteUri : http://localhost:8000/favicon.ico
3 $context.Request.Url.Authority : localhost:8000
4 $context.Request.Url.DnsSafeHost : localhost
5 $context.Request.Url.Fragment : 
6 $context.Request.Url.Host : localhost
7 $context.Request.Url.HostNameType : Dns
8 $context.Request.Url.IdnHost : localhost
9 $context.Request.Url.IsAbsoluteUri : True
10 $context.Request.Url.IsDefaultPort : False
11 $context.Request.Url.IsFile : False
12 $context.Request.Url.IsLoopback : True
13 $context.Request.Url.IsUnc : False
14 $context.Request.Url.LocalPath : /favicon.ico
15 $context.Request.Url.OriginalString : http://localhost:8000/favicon.ico
16 $context.Request.Url.PathAndQuery : /favicon.ico
17 $context.Request.Url.Port : 8000
18 $context.Request.Url.Query :
19 $context.Request.Url.Scheme : http
20 $context.Request.Url.Segments : / favicon.ico
21 $context.Request.Url.UserEscaped : False
22 $context.Request.Url.UserInfo :
 ----  $context.Request.Headers  Start   ----
 ----  $context.Request.Headers  Property Count: 1  ----
1 $context.Request.Headers.Length : 9 16 18 14 14 14 13 10 6 6 15 15 4 7 10
 ----  $context.Request.InputStream  Start   ----
 ----  $context.Request.InputStream  Property Count: 8  ----
1 $context.Request.InputStream.CanRead : True
2 $context.Request.InputStream.CanSeek : True
3 $context.Request.InputStream.CanTimeout : False
4 $context.Request.InputStream.CanWrite : True
5 $context.Request.InputStream.Length : 0
6 $context.Request.InputStream.Position : 0
7 $context.Request.InputStream.ReadTimeout :
8 $context.Request.InputStream.WriteTimeout : 
 ----  $context.Request.TransportContext  Start   ----
 ----  $context.Request.TransportContext  Property Count: 0  ----
 ----  $context.Request.UrlReferrer  Start   ----
 ----  $context.Request.UrlReferrer  Property Count: 22  ----
1 $context.Request.UrlReferrer.AbsolutePath : /
2 $context.Request.UrlReferrer.AbsoluteUri : http://localhost:8000/
3 $context.Request.UrlReferrer.Authority : localhost:8000
4 $context.Request.UrlReferrer.DnsSafeHost : localhost
5 $context.Request.UrlReferrer.Fragment :
6 $context.Request.UrlReferrer.Host : localhost
7 $context.Request.UrlReferrer.HostNameType : Dns
8 $context.Request.UrlReferrer.IdnHost : localhost
9 $context.Request.UrlReferrer.IsAbsoluteUri : True
10 $context.Request.UrlReferrer.IsDefaultPort : False
11 $context.Request.UrlReferrer.IsFile : False
12 $context.Request.UrlReferrer.IsLoopback : True
13 $context.Request.UrlReferrer.IsUnc : False
14 $context.Request.UrlReferrer.LocalPath : /
15 $context.Request.UrlReferrer.OriginalString : http://localhost:8000/
16 $context.Request.UrlReferrer.PathAndQuery : /
17 $context.Request.UrlReferrer.Port : 8000
18 $context.Request.UrlReferrer.Query : 
19 $context.Request.UrlReferrer.Scheme : http
20 $context.Request.UrlReferrer.Segments : /
21 $context.Request.UrlReferrer.UserEscaped : False
22 $context.Request.UrlReferrer.UserInfo :
 ----  $context.Request.RequestTraceIdentifier  Start   ---- 
 ----  $context.Request.RequestTraceIdentifier  Property Count: 0  ----
 ----  $context.Request.ContentEncoding  Start   ----
 ----  $context.Request.ContentEncoding  Property Count: 14  ----
1 $context.Request.ContentEncoding.BodyName : iso-2022-jp
2 $context.Request.ContentEncoding.CodePage : 932
3 $context.Request.ContentEncoding.DecoderFallback : System.Text.InternalDecoderBestFitFallback
4 $context.Request.ContentEncoding.EncoderFallback : System.Text.InternalEncoderBestFitFallback
5 $context.Request.ContentEncoding.EncodingName : 日本語 (シフト JIS)
6 $context.Request.ContentEncoding.HeaderName : iso-2022-jp
7 $context.Request.ContentEncoding.IsBrowserDisplay : True
8 $context.Request.ContentEncoding.IsBrowserSave : True
9 $context.Request.ContentEncoding.IsMailNewsDisplay : True
10 $context.Request.ContentEncoding.IsMailNewsSave : True
11 $context.Request.ContentEncoding.IsReadOnly : True
12 $context.Request.ContentEncoding.IsSingleByte : False
13 $context.Request.ContentEncoding.WebName : shift_jis
14 $context.Request.ContentEncoding.WindowsCodePage : 932
 ----  $context.User  Is Null   ---- 
 ----  $context.Response  Start   ----
 ----  $context.Response  Property Count: 12  ----
1 $context.Response.ContentEncoding :
2 $context.Response.ContentLength64 : 0
3 $context.Response.ContentType :
4 $context.Response.Cookies : 
5 $context.Response.Headers :
6 $context.Response.KeepAlive : True
7 $context.Response.OutputStream : System.Net.HttpResponseStream
8 $context.Response.ProtocolVersion : 1.1
9 $context.Response.RedirectLocation :
10 $context.Response.SendChunked : False
11 $context.Response.StatusCode : 200
12 $context.Response.StatusDescription : OK
 ----  $context.Response.OutputStream  Start   ----
 ----  $context.Response.OutputStream  Property Count: 8  ----
1 $context.Response.OutputStream.CanRead : False
2 $context.Response.OutputStream.CanSeek : False
3 $context.Response.OutputStream.CanTimeout : False
4 $context.Response.OutputStream.CanWrite : True
5 $context.Response.OutputStream.Length :
6 $context.Response.OutputStream.Position :
7 $context.Response.OutputStream.ReadTimeout :
8 $context.Response.OutputStream.WriteTimeout : 

なるほどいろいろとできそうな予感。パラメータがいろいろあって楽しそう。メソッドはどんな感じなんだろう。

ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。

コメント

タイトルとURLをコピーしました