Przejdź do treści

Centrum Kształcenia Zawodowego i Ustawicznego w Mrągowie

PowerShell: Serwer HTTP

wtorek,

PowerShell: Serwer HTTP

PowerShell sam w sobie nie ma wbudowanego serwera HTTP, ale można go łatwo utworzyć za pomocą różnych metod. Jedną z popularnych metod jest użycie w tym celu .NET Framework lub .NET Core. Prezentowany przykład korzysta z .NET Framework i jest bardzo prosty. Wszystkie zależności wymagane przez ten skrypt są spełnione w domyślnej instalacji Windows 11. W zależności od konfiguracji systemu i zasad zabezpieczeń może być konieczne wykonanie dodatkowych kroków, takich jak uruchomienie skryptu z uprawnieniami administratora lub konfiguracja zapory sieciowej.

Pamiętaj, że podczas tworzenia produkcyjnego serwera HTTP, szczególnie dostępnego publicznie, ważne jest, aby zwrócić uwagę na aspekty bezpieczeństwa, takie jak uwierzytelnianie, szyfrowanie i ochrona przed atakami. Istnieją również inne narzędzia i moduły, które można zainstalować i używać w PowerShellu do tworzenia serwerów HTTP, takie jak Pode czy Polaris. Oferują one bardziej zaawansowane funkcje i są łatwiejsze w obsłudze niż bezpośrednie korzystanie z klasy HttpListener.

Przykład

HttpListener to klasa w .NET, która umożliwia prostą obsługę żądań HTTP. Możesz napisać skrypt PowerShell, który wykorzystuje tę klasę do stworzenia podstawowego serwera HTTP.

$listener = New-Object System.Net.HttpListener
$listener.Prefixes.Add("http://localhost:8080/")
$listener.Start()
Write-Host "Listening..."

while ($listener.IsListening) {
    $context = $listener.GetContext()
    $response = $context.Response
    $responseString = "<HTML><BODY> Hello world!</BODY></HTML>"
    $buffer = [System.Text.Encoding]::UTF8.GetBytes($responseString)
    $response.ContentLength64 = $buffer.Length
    $output = $response.OutputStream
    $output.Write($buffer, 0, $buffer.Length)
    $output.Close()
}

$listener.Stop()

Ten skrypt uruchomi serwer, który nasłuchuje na porcie 8080 i odpowiada na wszystkie żądania wiadomością "Hello world!".

Omówienie przykładu

Prezentowany skrypt jest prostym przykładem tego, jak można użyć PowerShell i .NET Framework do stworzenia serwera HTTP. Może być użyteczny do celów testowych lub edukacyjnych, ale nie jest przeznaczony do zastosowań produkcyjnych ze względu na ograniczoną funkcjonalność i brak funkcji bezpieczeństwa.

Tworzenie obiektu HttpListener

$listener = New-Object System.Net.HttpListener

Ta linia tworzy nową instancję klasy HttpListener. HttpListener to klasa w .NET Framework, która umożliwia programowi nasłuchiwanie żądań HTTP i udzielanie na nie odpowiedzi.

Dodawanie prefiksu adresu URL

$listener.Prefixes.Add("http://localhost:8080/")

Dodanie do nasłuchiwanych przez serwer adresów URL prefiksu http://localhost:8080/. Oznacza to, że serwer będzie nasłuchiwał żądań HTTP wysyłanych na adres localhost (czyli komputer, na którym działa skrypt) na porcie 8080.

Uruchomienie nasłuchiwania

$listener.Start() Write-Host "Listening..."

Uruchomienie nasłuchiwania na skonfigurowanych adresach URL i wypisanie informacji, że nasłuch jest aktywny.

Obsługa żądań

Do obsługi przychodzących żądań jest używana pętla while:

while ($listener.IsListening) {
    ...
}

W każdej iteracji pętli skrypt czeka na nowe żądanie, a następnie je przetwarza.

Pobieranie kontekstu żądania

$context = $listener.GetContext()

Ta linia pobiera kontekst żądania HTTP, który zawiera informacje o żądaniu i odpowiedzi.

Tworzenie i wysyłanie odpowiedzi

Skrypt tworzy prostą odpowiedź HTML i wysyła ją do klienta:

$response = $context.Response
$responseString = "<HTML><BODY> Hello world!</BODY></HTML>"
$buffer = [System.Text.Encoding]::UTF8.GetBytes($responseString)
$response.ContentLength64 = $buffer.Length
$output = $response.OutputStream
$output.Write($buffer, 0, $buffer.Length)
$output.Close()

Tutaj odpowiedź ("Hello world!") jest konwertowana na bajty, a następnie wysyłana do klienta za pomocą strumienia wyjściowego (OutputStream) obiektu odpowiedzi.

Zakończenie nasłuchiwania

Po wyjściu z pętli (np. przez przerwanie skryptu) serwer przestaje nasłuchiwać:

$listener.Stop()

To zatrzymuje serwer i zwalnia zasoby.

Artykuł: Światowy Dzień Książki i Praw Autorskich

Światowy Dzień Książki i Praw Autorskich

Artykuł: Hiszpańska przygoda

Hiszpańska przygoda

Artykuł: Certyfikaty bezpieczeństwa dla zasilaczy komputerowych

Certyfikaty bezpieczeństwa dla zasilaczy komputerowych

Artykuł: DRAM Speculative Leadoff

DRAM Speculative Leadoff

Artykuł: Burst Mode DMA

Burst Mode DMA

Nasze technikum

Technik informatyk

Szkoły dla dorosłych

Nasza szkoła

Pełna oferta edukacyjna

Oferta szkoły