Skip to content

Instantly share code, notes, and snippets.

@andrii-riabchun
Created September 25, 2016 12:52
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save andrii-riabchun/07f854939ce776f6e54ba6b64f43cc92 to your computer and use it in GitHub Desktop.
Save andrii-riabchun/07f854939ce776f6e54ba6b64f43cc92 to your computer and use it in GitHub Desktop.
Powershell static http server
#Requires -RunAsAdministrator
# Simple static http server.
Param(
[int]$port = 8080,
[string]$root = (Get-Location)
)
function Serve {
$listener = [System.Net.HttpListener]::new()
$listener.Prefixes.Add("http://+:$port/")
Write-Host "Root: $root"
try {
$listener.Start()
Write-Host "server started on :$port"
while ($listener.IsListening) {
$context = $null
$ctxTask = $listener.GetContextAsync()
do {
if ($ctxTask.Wait(100)) {
$context = $ctxTask.Result
}
}
while (-not $context)
Handle $context
}
}
catch [System.Exception] {
Write-Host $_
}
finally {
$listener.Stop()
}
}
function Handle([System.Net.HttpListenerContext] $context) {
try {
Write-Host $context.Request.RawUrl
$path = $context.Request.RawUrl.TrimStart("/")
if ([String]::IsNullOrWhiteSpace($path)) {
$path = "index.html"
}
$path = [System.IO.Path]::Combine($root, $path)
if ([System.IO.File]::Exists($path)) {
$fstream = [System.IO.FileStream]::new($path, [System.IO.FileMode]::Open)
$fstream.CopyTo($context.Response.OutputStream)
} else {
$context.Response.StatusCode = 404
}
}
catch [System.Exception] {
$context.Response.StatusCode = 500
Write-Error $_
}
finally {
$context.Response.Close()
}
}
Serve
@KirtCarson
Copy link

#Change root accordingly.  I like sym links.
function GenIndexHtml {
$root='C:\Link\Link\';$Body = ls -r -file |%{ $UT8=$_ ; $_.fullname.replace($root,'') |%{ "<p><a href='http://192.168.0.100/"+[string]([uri]::EscapeUriString(($_.split('\\')|%{$_}) -join "/"))+"'/>$UT8</a></p>" } }
$IndexFileContent=@(); $IndexFileContent += "<html><head><title>Title</title></head><body>" ; $IndexFileContent +=$Body  ; $IndexFileContent += "</body><html>"
$IndexFileContent |sc index.html
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment