powershell httpwebrequest méthode GET cookiecontainer problème?

Je suis en train de gratter un site web d'authentification de l'utilisateur. Je suis capable de faire un POST pour envoyer mon login et stocke un cookie. Cependant, après la connexion, j'obtiens une erreur 403 lorsque vous essayez d'accéder à la page protégée.

$url = "https://some_url"
$CookieContainer = New-Object System.Net.CookieContainer
$postData = "User=UserName&Password=Pass"
$buffer = [text.encoding]::ascii.getbytes($postData)
[net.httpWebRequest] $req = [net.webRequest]::create($url)
$req.method = "POST"
$req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
$req.Headers.Add("Accept-Language: en-US")
$req.Headers.Add("Accept-Encoding: gzip,deflate")
$req.Headers.Add("Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7")
$req.AllowAutoRedirect = $false
$req.ContentType = "application/x-www-form-urlencoded"
$req.ContentLength = $buffer.length
$req.TimeOut = 50000
$req.KeepAlive = $true
$req.Headers.Add("Keep-Alive: 300");
$req.CookieContainer = $CookieContainer
$reqst = $req.getRequestStream()
$reqst.write($buffer, 0, $buffer.length)
$reqst.flush()
$reqst.close()
[net.httpWebResponse] $res = $req.getResponse()
$resst = $res.getResponseStream()
$sr = new-object IO.StreamReader($resst)
$result = $sr.ReadToEnd()
$res.close()
$url2 = "https://some_url/protected_page"
[net.httpWebRequest] $req2 = [net.webRequest]::create($url2)
$req2.Method = "GET"
$req2.Accept = "text/html"
$req2.AllowAutoRedirect = $false
$req2.CookieContainer = $CookieContainer
$req2.TimeOut = 50000
[net.httpWebResponse] $res2 = $req2.getResponse()
$resst = $res2.getResponseStream()
$sr = new-object IO.StreamReader($resst)
$result = $sr.ReadToEnd()

Solution de CONTOURNEMENT: Donc, après avoir essayé presque tout ce que j'ai fini d'essayer quelque chose de différent et il fonctionne réellement.

Après la publication de la connexion et d'obtenir le cookie de session, j'utilise webclient pour accéder à la page sécurisée en ajoutant le cookie de chaîne pour les en-têtes.

$web = new-object net.webclient
$web.Headers.add("Cookie", $res.Headers["Set-Cookie"])
$result = $web.DownloadString("https://secure_url")

L'un de sympathique, c'est que webclient enregistre le cookie. Pour accéder à une autre page sécurisée, vous pouvez les appeler $web.downloadstring("https://another_secure_url") 🙂

Vous pouvez poster votre solution complète pour cette. Je suis dans le même cas, mais je ne semble pas avoir ce travail tout à fait encore.
J'ai utilisé Fiddler2 pour capturer le trafic entre mon navigateur et le serveur, puis attrapa le cookie de l'en-tête de requête dans Fiddler2. J'ai ajouté ce témoin à la demande que vous montrez et maintenant DownloadString n'est pas constamment rediriger vers la page de connexion. Merci!

OriginalL'auteur foureight84 | 2011-03-29