.NET HttpWebResponse не предоставляет заголовок Location - PullRequest
4 голосов
/ 13 января 2011

У меня проблема с получением заголовка Location из WebResponse:

private CookieContainer _cookieContainer = new CookieContainer();
...
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(uri);

webRequest.Method = "POST";          
webRequest.Referer = "www.xxxxx.sk";            
webRequest.Proxy = GetSystemProxy();
webRequest.AllowAutoRedirect = false;
webRequest.CookieContainer = _cookieContainer;
webRequest.ContentType = "application/x-www-form-urlencoded";                                
webRequest.KeepAlive = false;            
//webRequest.Expect = "Location";

Когда я использую плагин данных Tamper в Firefox - я получаю то, что хочу:

Местонахождение = http://www.xxxxx.sk? I9 = 3522a42d0207

Но, глядя на HttpWebResponse.Headers, этот заголовок не содержится (хотя 90% полученных заголовков такие же, как и в случае Firefox)

Я пытался установить. Expect, чтобы заставить сервер предоставить мне этот заголовок, но я получил ошибку 417 Ожидание не удалось.

Причина, по которой мне нужен этот заголовок, заключается в том, что в нем есть идентификатор сеанса, который мне нужен для дальнейших запросов (веб-сайт имеет двойную защиту - файлы cookie + идентификаторы сеанса в URL)

Что я не понимаю, так это то, что по умолчанию HttpWebRequest будет следовать перенаправлениям , поэтому, если сервер отправляет код состояния 301/302, будет выдан новый запрос на выборку ресурса с помощью заголовка Location. Таким образом, после извлечения этого последнего ресурса в ответе не будет заголовка Location. Но если я установлю AllowAutoRedirect на false , почему заголовок не появится?

РЕДАКТИРОВАНИЕ: Заголовки:

Mozilla request headers:


Host=prihlasenie.azet.sk
User-Agent=Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language=en-us,en;q=0.5
Accept-Encoding=gzip,deflate
Accept-Charset=ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive=115
Connection=keep-alive
Referer=http://www.azet.sk/
Content-Type=application/x-www-form-urlencoded
Content-Length=64
POSTDATA=form%5Busername%5D=yyyyyyyyyy&form%5Bpassword%5D=zzzzzzzzzz
--
Mozilla response headers:



Status=Found - 302
Date=Fri, 14 Jan 2011 13:12:37 GMT
Server=Apache
Pragma=no-cache
Expires=Fri, 14 Jan 2011 13:12:37 +0000
Cache-Control=post-check=0, pre-check=0, no-cache, must-revalidate
Set-Cookie=AZetSecId=3a2f118910; expires=Fri, 28-Jan-2011 13:12:37 GMT; path=/; domain=.azet.sk
Location=http://www.azet.sk/?i9=6ffcf488a877
Vary=User-Agent,Accept-Encoding
X-Served-By=prihlasenieweb-04
Content-Encoding=gzip
Content-Length=1124
Keep-Alive=timeout=15, max=82
Connection=Keep-Alive
Content-Type=text/html

--
------------------------------------------------
---
HttpWebRequest headers:

{Referer: http://www.xxxx.sk
Content-Type: application/x-www-form-urlencoded
Host: prihlasenie.xxxx.sk
Content-Length: 59
Expect: 100-continue
Connection: Close
}

and I'm doing:

byte[] paramBytes = Encoding.ASCII.GetBytes(postParameters);
webRequest.ContentLength = paramBytes.Length;

using (Stream requestStream = webRequest.GetRequestStream())
{
    requestStream.Write(paramBytes, 0, paramBytes.Length);
}
---
HttpWebResponse headers:

{Pragma: no-cache
Vary: User-Agent,Accept-Encoding
X-Served-By: prihlasenieweb-05
Connection: close
Content-Length: 2113
Cache-Control: post-check=0, pre-check=0, no-cache, must-revalidate
Content-Type: text/html
Date: Thu, 13 Jan 2011 20:56:21 GMT
Expires: Thu, 13 Jan 2011 20:56:21 +0000
Set-Cookie: xxxxSecId=b425262c2e; expires=Thu, 27-Jan-2011 20:56:21 GMT; path=/; domain=.xxxx.sk
Server: Apache
}

1 Ответ

2 голосов
/ 15 января 2011

Проблема заключается в инициализации файлов cookie, поскольку веб-сервер может использовать их для запуска процесса аутентификации.

Дополнительное примечание: пожалуйста, добавьте (http) cookie в теги («заголовки http» один охватывает их, но это слишком глобальный тег)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...