Created
July 29, 2017 10:00
-
-
Save benpturner/11ba5c2f39e4b89b8ffcf252bebb566e to your computer and use it in GitHub Desktop.
Simple HTTP Server
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$serverport = '$port' | |
$httpresponse = ' | |
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> | |
<html><head> | |
<title>404 Not Found</title> | |
</head><body> | |
<h1>Not Found</h1> | |
<p>The requested URL was not found on this server.</p> | |
<hr> | |
<address>Apache (Debian) Server</address> | |
</body></html> | |
' | |
$listener = New-Object -TypeName System.Net.HttpListener | |
$listener.Prefixes.Add("http://+:$serverport/") | |
$listener.Start() | |
echo "started http server" | |
while ($listener.IsListening) | |
{ | |
$message = $null | |
$context = $listener.GetContext() # blocks until request is received | |
$request = $context.Request | |
$response = $context.Response | |
$url = $request.RawUrl | |
$method = $request.HttpMethod | |
if ($null -ne ($URLS | ? { $url -match $_ }) ) | |
{ | |
$cookiesin = $request.Cookies -replace 'SessionID=', '' | |
$responseStream = $request.InputStream | |
$targetStream = New-Object -TypeName System.IO.MemoryStream | |
$buffer = new-object byte[] 10KB | |
$count = $responseStream.Read($buffer,0,$buffer.length) | |
$downloadedBytes = $count | |
while ($count -gt 0) | |
{ | |
$targetStream.Write($buffer, 0, $count) | |
$count = $responseStream.Read($buffer,0,$buffer.length) | |
$downloadedBytes = $downloadedBytes + $count | |
} | |
$len = $targetStream.length | |
$size = $len + 1 | |
$size2 = $len -1 | |
$buffer = New-Object byte[] $size | |
$targetStream.Position = 0 | |
$targetStream.Read($buffer, 0, $targetStream.Length)|Out-null | |
$buffer = $buffer[0..$size2] | |
$targetStream.Flush() | |
$targetStream.Close() | |
$targetStream.Dispose() | |
if ($method -eq "GET") { | |
$message = "GET MESSAGE" | |
} | |
if ($method -eq "POST") { | |
$message = "POST MESSAGE" | |
} | |
} | |
if (!$message) { | |
$message = $httpresponse | |
echo $request | |
} | |
[byte[]] $buffer = [System.Text.Encoding]::UTF8.GetBytes($message) | |
$response.ContentLength64 = $buffer.length | |
$response.StatusCode = 200 | |
$response.Headers.Add("CacheControl", "no-cache, no-store, must-revalidate") | |
$response.Headers.Add("Pragma", "no-cache") | |
$response.Headers.Add("Expires", 0) | |
$output = $response.OutputStream | |
$output.Write($buffer, 0, $buffer.length) | |
$output.Close() | |
$message = $null | |
} | |
$listener.Stop() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment