Skip to content

Instantly share code, notes, and snippets.

@benpturner
Created July 29, 2017 10:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save benpturner/11ba5c2f39e4b89b8ffcf252bebb566e to your computer and use it in GitHub Desktop.
Save benpturner/11ba5c2f39e4b89b8ffcf252bebb566e to your computer and use it in GitHub Desktop.
Simple HTTP Server
$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