ค้นหาเว็บไซต์

เรียกใช้เว็บเซิร์ฟเวอร์ HTTP อย่างง่ายโดยใช้ PowerShell


เพื่อจุดประสงค์ในการทดสอบหรือเป็นโครงง่ายๆ ในขั้นตอนการปรับใช้บริการ ฉันจำเป็นต้องเรียกใช้เว็บเซิร์ฟเวอร์อย่างง่ายบน Windows เป็นประจำ หากต้องการหลีกเลี่ยงการติดตั้ง IIS ที่มีคุณสมบัติครบถ้วน คุณสามารถเรียกใช้เว็บเซิร์ฟเวอร์ HTTP อย่างง่ายได้โดยตรงจากคอนโซล PowerShell ของคุณ คุณสามารถเรียกใช้เว็บเซิร์ฟเวอร์ดังกล่าวบนพอร์ต TCP ใดก็ได้โดยใช้คลาส System.Net.HttpListener .NET ในตัว

เปิดคอนโซล PowerShell ของคุณและสร้างตัวฟัง HTTP:

$httpListener = New-Object System.Net.HttpListener

จากนั้นระบุพอร์ตที่จะฟัง ในตัวอย่างนี้ ฉันต้องการเรียกใช้เว็บเซิร์ฟเวอร์ HTTP บนพอร์ต 9090

$httpListener.Prefixes.Add("http://localhost:9090/")
  • ตรวจสอบให้แน่ใจว่าพอร์ตนี้ไม่ได้ถูกใช้โดยกระบวนการอื่น คุณสามารถดูได้ว่ากระบวนการใดกำลังฟัง TCP หรือ UDP บน Windows

  • หากต้องการฟังในอินเทอร์เฟซเครือข่ายทั้งหมด ให้ใช้

    http://+:9090/

    ที่อยู่.

เริ่มฟัง:

$httpListener.Start()

คุณสามารถใช้การรับรองความถูกต้องประเภทต่างๆ (Basic, Digest, Windows, Negotiate หรือ NTLM) ในวัตถุ HttpListener หรือผูกใบรับรอง SSL เพื่อใช้ HTTPS

หากคุณเรียกใช้รหัสนี้ กระบวนการแยกต่างหากที่รอการเชื่อมต่อบนพอร์ต 9090 จะปรากฏใน Windows ตรวจสอบโดยใช้คำสั่ง:

nestat -na 9090

หรือแสดงรายการพอร์ตที่เปิดอยู่โดยใช้ PowerShell:

Get-NetTCPConnection -State Listen | Select-Object -Property LocalAddress, LocalPort, State | Sort-Object LocalPort |ft

อย่าลืมเปิดพอร์ตนี้ใน Windows Defender Firewall คุณสามารถสร้างกฎเพื่อเปิดพอร์ตไฟร์วอลล์ได้อย่างรวดเร็วโดยใช้คำสั่ง PowerShell:

New-NetFirewallRule -DisplayName "AllowTestWebServer" -Direction Inbound -Protocol TCP -LocalPort 9090 -Action Allow

ตอนนี้สร้างไฟล์ข้อความบนฮาร์ดไดรฟ์ของคุณด้วย HTML ที่คุณต้องการให้เว็บเซิร์ฟเวอร์ของคุณแสดง ตัวอย่างเช่น:

<!DOCTYPE html>
<html>
<head>
<title>
Lightweight PowerShell Web Server</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body {background-color:#ffffff;background-repeat:no-repeat;background-position:top left;background-attachment:fixed;}
h1{font-family:Arial, sans-serif;color:#000000;background-color:#ffffff;}
p {font-family:Georgia, serif;font-size:14px;font-style:normal;font-weight:normal;color:#000000;background-color:#ffffff;}
</style>
</head>
<body>
<h1>Test web page </h1>
<p>This web page was generated by PowerShell using the System.Net.HttpListener class</p>
</body>
</html>

ฉันบันทึกโค้ด HTML นี้ไว้ที่ C:\PS estwebpage.html ด้วยการเข้ารหัส UTM-8

จากนั้นเรียกใช้คำสั่งต่อไปนี้เพื่ออ่านไฟล์ HTML และส่งการตอบกลับไปยังเบราว์เซอร์ของผู้ใช้

$context = $httpListener.GetContext()
$context.Response.StatusCode = 200
$context.Response.ContentType = 'text/HTML'
$WebContent = Get-Content  -Path "C:\PS\testwebpage.html" -Encoding UTF8
$EncodingWebContent = [Text.Encoding]::UTF8.GetBytes($WebContent)
$context.Response.OutputStream.Write($EncodingWebContent , 0, $EncodingWebContent.Length)
$context.Response.Close()

เปิดที่อยู่ URL ของเซิร์ฟเวอร์ HTTP ของคุณในเบราว์เซอร์ (

http://localhost:9090

) หรือใช้ PowerShell เพื่อรับเนื้อหาของหน้าเว็บ สคริปต์ส่งคืนรหัส HTML เพียงครั้งเดียว หลังจากนั้นระบบจะหยุดฟังของคุณโดยอัตโนมัติ (ประมวลผลคำขอของผู้ใช้เพียงรายเดียว)

ฟรีพอร์ต TCP:

$httpListener.Close()

หากคุณต้องการให้เซิร์ฟเวอร์ HTTP ส่งคืนหน้าของคุณต่อไป คุณต้องเพิ่มโค้ด PowerShell ลงในลูป ตัวอย่างต่อไปนี้เริ่มต้นเซิร์ฟเวอร์ HTTP ในลูปที่สิ้นสุดเมื่อมีการกดคีย์ใดๆ ในคอนโซล PowerShell

write-host "Press any key to stop the HTTP listener after next request"
while (!([console]::KeyAvailable)) {
$context = $httpListener.GetContext()
$context.Response.StatusCode = 200
$context.Response.ContentType = 'text/HTML'
$WebContent = Get-Content -Path "C:\PS\testwebpage.html" -Encoding UTF8
$EncodingWebContent = [Text.Encoding]::UTF8.GetBytes($WebContent)
$context.Response.OutputStream.Write($EncodingWebContent , 0, $EncodingWebContent.Length)
$context.Response.Close()
Write-Output "" # Newline
}
$httpListener.Close()

เซิร์ฟเวอร์ PowerShell HTTP จะยังคงอยู่จนกว่าคุณจะปิดคอนโซล PowerShell หรือสิ้นสุดเซสชันโดยใช้

.Close

วิธี.

คุณสามารถเรียกใช้สคริปต์ PowerShell นี้เป็นบริการของ Windows

คุณสามารถเรียกใช้เว็บเซิร์ฟเวอร์ขนาดเล็กบนโฮสต์ Windows ใดก็ได้โดยไม่ต้องใช้บริการข้อมูลทางอินเทอร์เน็ตหรือการติดตั้งซอฟต์แวร์ของบริษัทอื่น ไม่จำเป็นต้องมีสิทธิ์ของผู้ดูแลระบบ คุณสามารถใช้ HTTPListener นี้เป็นเซิร์ฟเวอร์ REST อย่างง่าย หรือเพื่อรับข้อมูลจากคอมพิวเตอร์ระยะไกลผ่าน HTTP

บทความที่เกี่ยวข้อง