2011-01-13 8 views
4

Bereitstellung Ich habe ein Problem Location-Header aus dem WebResponse zu erhalten:.NET HttpWebResponse nicht Location-Header

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"; 

Wenn ich Tamper Daten-Plugin in Firefox verwenden - ich bekommen, was ich will:

Location = http://www.xxxxx.sk?i9=3522a42d0207

Aber HttpWebResponse.Headers Suche enthält nicht diesen Header (obwohl 90% der empfangenen Header die gleiche wie bei Firefox)

Ich habe versucht zu setzen. Expect, um den Server zu zwingen, mir diesen Header bereitzustellen, aber ich habe Fehler 417 Erwartung fehlgeschlagen.

Der Grund, warum ich, dass die Header wollen, ist, dass es eine Session-ID in es ist, die ich für weitere Anfragen brauchen (Website doppelte Sicherheit hat - Cookies + Session-IDs in URL)

Was ich nicht Verstehen ist, dass standardmäßig HttpWebRequestWeiterleitungen folgen werden, wenn also ein Server 301/302 Statuscode sendet, wird eine neue Anfrage ausgegeben, um die Ressource mit dem Location-Header abzurufen. Sobald diese finale Ressource abgerufen wird, ist in der Antwort kein Location-Header mehr vorhanden. Aber wenn ich AllowAutoRedirect auf false setzen, warum erscheint der Header nicht?

EDITED: Vorsätze:

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 
} 
+0

Warum man überhaupt „erwarten“ Header verwenden? Die andere Option wäre, dass der CookieContainer vor der Anforderung nicht ordnungsgemäß initialisiert wird. – bestsss

+0

Hmm. klingt wie ein Fehler. Kannst du ein System.net-Trace-Log bekommen und es auf Pastebin setzen? Hier sind die Anweisungen http://ferozedaud.blogspot.com/2009/08/tracing-with-systemnet.html – feroze

+0

Ich wollte nicht normalerweise erwarten, aber es war einen Versuch wert .. –

Antwort

2

Das Problem liegt in der Initialisierung der Cookies, da der Webserver auf sie verlassen kann den Authentifizierungsprozess zu starten.

Zusätzliche Anmerkung: Bitte fügen Sie (http) Cookie in den Tags („http-Header“ ein deckt es, aber es ist auch eine globale Variable)