Кто-то, пожалуйста, помогите - боролся с этой паршивой проблемой!
Что я делаю - у меня есть страница ASPX, с которой я создаю GET, а затем POST к HTTPS страница с целью авторизации на нем.Я потратил довольно много времени, сравнивая мою конструкцию GET и POST с браузером GET / POST, используя fiddler (анализатор протокола), и мои запросы в порядке.
Однако, когда я пытаюсь войти через браузер, все работаетхорошо, и он входит в систему. Когда я запускаю свою страницу, я вижу правильные значения GET и POST, но я получаю 302 найденных «объект перемещен ошибка»
Первоначально я думал, что это проблема с cookie, но после большогоЭксперименты Я уверен, что это не имеет ничего общего с куки.Я отключил куки и JavaScript в браузере и попытался, и страницы работают без них.Затем я смоделировал точный GET / POST.
Это моя ситуация:
- Мой GET и браузеры GET точно такие же
- Ответ 200 OK сайта точно такой же, за исключением трех VIEWSTATEпеременные, которые имеют немного различную длину (почему? почему различаются, даже если GET одинаков?)
- Мой POST и POST для браузеров Точно одинаковы, КРОМЕ 3 переменных Viewstate (я заполняю их правильно из GET)
- И все же браузер входит в систему, в то время как я получаю 302 найденных / ошибочных перемещенных объектов.
Пара других вещей -
a) Я скопировал POSTответ от недавнего POST браузера и заменил мои параметры POST на этот POST браузера, и это дало мне правильный ответ!Это означает, что
- мои заголовки просто в порядке
- мои настройки кодирования / окружение и т. Д. В порядке
- что-то подозрительное в значениях VIEWSTATE, что может быть только потому, что браузер отправил его мне в первомместо (нет никакого искажения в моем разборе переменных GET VIEWSTATE и использовании его в POST, это прекрасно)
update Я также попробовал WebClient просто проверить - без разницы, те же 302. update Объект, перемещенный в основном, указывает на страницу с ошибкой, на которой говорится, что «произошла серьезная ошибка, бла-бла» - POST вызывает ошибку на сервере, и ЕДИНСТВЕННАЯ разница между хорошим POST (браузером).) и мой POST - это переменные Viewstate.
Итак - ЧТО Я ДЕЛАЮ НЕПРАВИЛЬНО?Почему этот жестокий мир мучает меня? !!
(PS - еще одно отличие в последовательности браузера, не знаю, как это важно)
Browser:<br>
CONNECT<br>
GET<br>
GET (for a favicon, which returns an error)<br>
CONNECT<br>
POST (success)<br>
Me:<br>
CONNECT<br>
GET<br>
POST (flaming failure, 302 - page moved)<br>
и дляте, кого это волнует, мой код постройки заголовка POST
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(URL);
myRequest.UserAgent = chromeUserAgent;
//myRequest.CookieContainer = cCookies;
myRequest.ContentType = "application/x-www-form-urlencoded";
myRequest.Accept = chromeAccept;
myRequest.Referer = url;
myRequest.AllowAutoRedirect = false;
myRequest.Host = "thesitethatskillingme.com";
myRequest.Headers.Add("Origin", "https://thesitethatskillingme.com");
myRequest.Headers.Add("Accept-Encoding", chromeAcceptEncoding);
myRequest.Headers.Add("Accept-Language", chromeAcceptLanguage);
myRequest.Headers.Add("Accept-Charset", chromeAcceptCharset);
myRequest.Headers.Add("Cache-Control", "max-age=0");
myRequest.ServicePoint.Expect100Continue = false;
myRequest.Method = "POST";
myRequest.KeepAlive = true;
ASCIIEncoding ascii = new ASCIIEncoding();
byte[] bData = ascii.GetBytes(data);
myRequest.ContentLength = bData.Length;
using (Stream oStream = myRequest.GetRequestStream())
oStream.Write(bData, 0, bData.Length);
... а затем прочитайте поток и т. д. без файлов cookie.