0

我有一个内部 .NET Web 服务,我尝试从公共网络访问它。

如果使用浏览器,用户可以在 Citrix NetScaler 自定义页面上输入表单,提交表单后,继续浏览,Web 服务端点正常工作loginpasswd

我对 Citrix NetScaler 一无所知,但通过检查浏览器开发工具中的网络调用,我能够使用 PowerShell 和Microsoft.PowerShell.Commands.WebRequestSession对象访问 Web 服务:

$session = New-Object Microsoft.PowerShell.Commands.WebRequestSession

$cookie = New-Object System.Net.Cookie 
$cookie.Name = "NSC_TASS"
$cookie.Value = "https://REST_SERVICE_DOMAIN/api/"
$cookie.Domain = "CITRIX_NETSCALER_DOMAIN.com"
$session.Cookies.Add($cookie);

$response = Invoke-WebRequest -Uri "https://CITRIX_NETSCALER_DOMAIN/cgi/login" `
    -Method "POST" `
    -Headers @{"Content-Type"="application/x-www-form-urlencoded"} `
    -Body "login=URL_ENCODED_EMAIL&passwd=URLENCODED_PASSWORD" `
    -WebSession $session

有没有办法不使用 PowerShell 的Microsoft.PowerShell.Commands.WebRequestSession对象登录?我是否使用了正确的端点?

编辑:我正在寻找不涉及 PowerShell 的解决方案,但它仅依赖于 HTTP 标头和 cookie

4

1 回答 1

0

我认为您可以使用 Invoke-WebRequest 执行 -SessionVariable,然后以类似的方式附加 cookie。

Invoke-WebRequest https://CITRIX_NETSCALER_DOMAIN/cgi/login -SessionVariable session
...
$session.Cookies.Add($cookie);
于 2020-12-19T05:17:52.893 回答