2009-06-22 14 views
4
Verschoben

Ich versuche, ein Skript zu erstellen, die eine Webseite Logins und packt einen Bericht - alles GROSS arbeitet außer - Ich bin eine AntwortHTTPS C# 302 POST

HTTP/1.1 302 MovedTemporarily 
Date: Mon, 22 Jun 2009 13:22:04 GMT 
Server: Server 
x-some-id-1: 0J3X3VBBCGNJG9V46G5D 
x-some-id-2: BtQ4SsDhbryWgiVNFcVpMbt898GuPIBaWuGwAWjvsyI= 
Set-cookie: session-id-time=1246258800l; path=/; domain=.example.com; expires=Mon Jun 29 07:00:00 2009 GMT 
Set-cookie: session-id=179-5933843-4704124; path=/; domain=. example.com; expires=Mon Jun 29 07:00:00 2009 GMT 
Location: https://example.com 
Vary: Accept-Encoding,User-Agent 
nnCoection: close 
Content-Type: text/html; charset=UTF-8 
Content-Length: 0 

bekommen und ich habe keine Ahnung, wie man Hör auf. Ich habe versucht, Einstellungen

httpwebrequest.allowautoredirect sowohl "True" und "False" und nichts hilft.

Es versucht mich verrückt, wie ich auf der Website über https: // einloggen kann, aber dann bekomme ich das zurück?

Antwort

4

Ich war auf dieses Problem für eine lange Zeit fest - so froh, dass ich helfen kann. Lesen Sie diesen Artikel

http://www.byteblocks.com/page/How-to-submit-requests-to-web-sites-programatically-using-HttpWebRequest.aspx

Das zentrale Problem ist, dass Sie nicht HttpWebRequest verwenden können mit automatischen Umleitungen aktivierten einen Login-Prozess mit 302s und Cookies zu tun, weil die Cookies bis zum Ende des gesamten Prozesses werden nicht gesetzt.

Die Lösung besteht darin, automatische Umleitungen zu deaktivieren und den gesamten Anmeldeprozess Schritt für Schritt manuell zu implementieren (den Header "Location" von 302 Redirect-Antworten sowie den Header "Set-cookie") diese bei Bedarf an die folgenden Schritte weiterleiten).

Ihr Cookie-Container muss alle Cookies auf dem Weg mitnehmen und am Ende einreichen. Wenn Sie eine 302 erhalten, werden Sie Ihren Kopf gegen die Wand schlagen und sich wundern, warum Sie immer auf der Anmeldeseite landen.

2

Ich weiß, kann helfen, diese Frage ist alt, aber Punkte hier googeln. Also, hier sind eine andere Lösung für WebClient.

public class CookieAwareWebClient : WebClient 
{ 
    private CookieContainer cookie = new CookieContainer(); 

    protected override WebRequest GetWebRequest(Uri address) 
    { 
     WebRequest request = base.GetWebRequest(address); 
     if (request is HttpWebRequest) 
     { 
      (request as HttpWebRequest).CookieContainer = cookie; 
      (request as HttpWebRequest).UserAgent = "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1300.0 Iron/23.0.1300.0 Safari/537.11"; 
     } 
     return request; 
    } 
} 

erstellen Dann WebClient Objekt CookieAwareWebClient wc = new CookieAwareWebClient(); und tun, was Sie benötigen.

Bearbeiten: funktioniert auch über HTTP und HTTPS.