我成功地在我的计算机上打开了一个端口(仅使用PowerShell)并知道何时对该端口发出HTTP请求。我想出了这个简单的代码:
$listener = [System.Net.Sockets.TcpListener]5566;
$listener.Start();
while ($true) {
$client = $Listener.AcceptTcpClient();
Write-Host "Connected!";
$client.Close();
}
如果我打开浏览器并在PowerShell界面中键入http://localhost:5566
,它将显示用户已连接的消息。
我需要做的是获取此HTTP请求的GET参数。例如,如果我打开浏览器并输入http://localhost:5566/test.html?parameter1=xxx¶meter2=yyy
。
如何使用上面的简化代码获取GET参数(parameter1和parameter2)名称和值?
答案 0 :(得分:0)
如果您习惯使用HttpListener而不是TcpListener。这样做更容易。
下面的脚本将在浏览器中输出
Path is /test.html
parameter2 is equal to yyy
parameter1 is equal to xxx
快速而肮脏的剧本
$listener = New-Object System.Net.HttpListener
$listener.Prefixes.Add("http://localhost:5566/")
try {
$listener.Start();
while ($true) {
$context = $listener.GetContext()
$request = $context.Request
# Output the request to host
Write-Host $request | fl * | Out-String
# Parse Parameters from url
$rawUrl = $request.RawUrl
$Parameters = @{}
$rawUrl = $rawUrl.Split("?")
$Path = $rawUrl[0]
$rawParameters = $rawUrl[1]
if ($rawParameters) {
$rawParameters = $rawParameters.Split("&")
foreach ($rawParameter in $rawParameters) {
$Parameter = $rawParameter.Split("=")
$Parameters.Add($Parameter[0], $Parameter[1])
}
}
# Create output string (dirty html)
$output = "<html><body><p>"
$output = $output + "Path is $Path" + "<br />"
foreach ($Parameter in $Parameters.GetEnumerator()) {
$output = $output + "$($Parameter.Name) is equal to $($Parameter.Value)" + "<br />"
}
$output = $output + "</p></body></html>"
# Send response
$statusCode = 200
$response = $context.Response
$response.StatusCode = $statusCode
$buffer = [System.Text.Encoding]::UTF8.GetBytes($output)
$response.ContentLength64 = $buffer.Length
$output = $response.OutputStream
$output.Write($buffer,0,$buffer.Length)
$output.Close()
}
} finally {
$listener.Stop()
}
干杯 格伦