2009-06-22 9 views
4

Je suis en train de créer un script qui logins à une page Web et saisit un rapport - tout fonctionne super, sauf - Je reçois une réponseHTTPS C# POST 302 Moved

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 

et je ne sais pas comment arrête ça. J'ai essayé les paramètres

httpwebrequest.allowautoredirect à la fois "True" et "False" et rien n'y fait.

Ça me rend fou comme je peux me connecter au site via https: // mais je reçois ce retour?

Répondre

4

J'ai été bloqué sur ce problème pendant longtemps - si heureux que je peux aider. Lisez cet article

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

La question clé est que vous ne pouvez pas utiliser HttpWebRequest avec redirection automatique a permis de faire un processus de connexion impliquant 302S et les cookies parce que les cookies ne sont pas réglés avant la fin du processus. La solution consiste à désactiver les redirections automatiques et à implémenter l'ensemble du processus de connexion manuellement étape par étape (obtenir l'en-tête 'Location' des réponses 302 de redirection, ainsi que l'en-tête 'Set-cookie', et transmettez-les à des étapes successives au besoin).

Votre boîte à cookies doit saisir tous les cookies le long du chemin et les soumettre à la fin. Si vous obtenez un 302 - vous frapperez votre tête contre le mur en vous demandant pourquoi vous continuez à vous retrouver sur la page de connexion.

2

Je sais, cette question est vieux, mais google points ici. Donc, voici une autre solution à 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; 
    } 
} 

Ensuite, créez WebClient objet CookieAwareWebClient wc = new CookieAwareWebClient(); et faire ce que vous avez besoin.

Editer: fonctionne aussi via HTTP et HTTPS.