Kullanıcı kimlik doğrulaması olan bir web sitesini taramaya çalışıyorum. Girişimi göndermek ve bir çerez saklamak için bir POST yapabiliyorum. Ancak, giriş yaptıktan sonra korunan sayfaya erişmeye çalışırken 403 hatası alıyorum.powershell httpwebrequest GET yöntemi cookiecontainer sorunu mu?
$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()
Çözüm: yüzden farklı bir şey çalışıyorum sona erdi ve aslında çalışır hemen her şeyi denedikten sonra.
Oturum açtıktan ve oturum çerezi alındıktan sonra, çerez dizesini başlıklara ekleyerek güvenli sayfaya erişmek için webclient kullanıyorum.
$web = new-object net.webclient
$web.Headers.add("Cookie", $res.Headers["Set-Cookie"])
$result = $web.DownloadString("https://secure_url")
Bunun en güzel yanlarından biri de webclient'in çerezi kaydetmesidir. Başka bir güvenli sayfaya erişmek için, sadece $ web.downloadstring ("https: // bir başka_secure_url") :)
bu işlem için komple bir çözüm gönderebilir miyim var. Ben de aynı durumdayım ama henüz bu kadar çalışmam görünmüyor. – bearrito
Tarayıcım ile sunucu arasındaki trafiği yakalamak için Fiddler2'yi kullandım ve daha sonra Fiddler2'deki istek başlığından çerezi aldım. Bu çerezi siz gösterdiğiniz gibi ekledim ve şimdi DownloadString sürekli olarak giriş sayfasına yönlendirme yapmıyor. Teşekkürler! –