2010-11-02 18 views
2

je veux lire un site web en C# en utilisant ceci:Est-il possible de transmettre les informations de connexion pour lire un site web en C#

 WebRequest myWebRequest = WebRequest.Create("http://www.myurl.com/test.aspx"); 
     WebResponse myWebResponse = myWebRequest.GetResponse(); 
     Stream ReceiveStream = myWebResponse.GetResponseStream(); 
     Encoding encode = System.Text.Encoding.GetEncoding("utf-8"); 
     StreamReader readStream = new StreamReader(ReceiveStream, encode); 
     string strResponse = readStream.ReadToEnd(); 

la question est qu'ils ont maintenant l'authentification sur la page si je reçois la invite de connexion lorsque je vais sur le site et que je dois taper le nom d'utilisateur et la connexion.

mon code retourne maintenant l'erreur:

The remote server returned an error: (401) Unauthorized. 

i essayé d'ajouter ceci:

myWebRequest.Credentials = new NetworkCredential("[username]", "[pwd]"); 

et ceci:

ServicePointManager.ServerCertificateValidationCallback += delegate { return true; }; 

mais toujours obtenu la même erreur:

Y at-il de toute façon à passer s ces informations d'identification dans le code WebRequest ci-dessus?

Répondre

2

Si le site utilise l'authentification HTTP de base (une boîte de dialogue de connexion généré navigateur), vous pouvez définirdu propriété à une instance NetworkCredential. Si le site Web utilise l'authentification par formulaires (un formulaire de connexion basé sur HTML, ce qui est plus courant), vous devrez faire une demande distincte pour vous connecter au site et partager un CookieContainer entre les demandes afin de préserver la connexion.
Vous pouvez utiliser Fiddler pour voir à quoi devrait ressembler la requête de connexion.

+0

voir la question mise à jour Pouvez-vous expliquer comment j'utiliserais fiddler pour déterminer ce qui est attendu? – leora

+0

@ooo: Connectez-vous au site Web avec Fiddler en cours d'exécution et regardez les demandes. – SLaks

1

Oui bien sûr, vous pouvez transmettre les informations de connexion (lorsque l'authentification « se compose de l'authentification de base (ce qui est une application axée sur Demander confirmation pour un compte du système d'exploitation en général) ou NTLM (sécurité de fichiers intégré) »):

myWebRequest.Credentials = new NetworkCredential("username","password"); 

un examen plus approfondi ici:

http://www.west-wind.com/presentations/dotnetwebrequest/dotnetwebrequest.htm

+0

voir la question mise à jour. Cela ne semble pas fonctionner – leora

+0

@ooo - Avez-vous lu l'article? Peut-être y at-il plus d'informations liées. Je suppose que ce n'est pas "https", si c'est le cas: http://www.west-wind.com/weblog/posts/48909.aspx pour accepter tous les certificats. – netadictos

+0

certainement pas https - j'ai mis à jour la question. J'ai ajouté la politique d'acceptall mais ne semble pas aider. – leora