2011-01-19 7 views
29

Desidero scaricare qualcosa utilizzando un oggetto WebClient in C#, ma il dominio di download richiede l'accesso. Come posso accedere e mantenere i dati della sessione tramite WebClient? So come pubblicare i dati con WebClient.Come accedere a un sito con WebClient?

+1

Che tipo di meccanismo di autenticazione richiede il server? Basic, Forms, Windows/NTLM? –

+2

lol ho risolto il problema aggiungendo valori maunally guardando dai cookie firefox :) webClient.Headers.Add ("Cookie", "PHPSESSID = xxxxxxx; mosesuser = xxxxxxx;"); – MonsterMMORPG

+0

Quali valori? Intendi il vero auth cookie? Ricorda che il valore probabilmente scadrà e non può essere riutilizzato in un secondo momento. –

risposta

47

Se il problema riscontrato è possibile autenticarsi ma non è possibile mantenere qui il cookie di autenticazione è una versione di WebClient compatibile con i cookie.

private class CookieAwareWebClient : WebClient 
{ 
    public CookieAwareWebClient() 
     : this(new CookieContainer()) 
    { } 
    public CookieAwareWebClient(CookieContainer c) 
    { 
     this.CookieContainer = c; 
    } 
    public CookieContainer CookieContainer { get; set; } 

    protected override WebRequest GetWebRequest(Uri address) 
    { 
     WebRequest request = base.GetWebRequest(address); 

     var castRequest = request as HttpWebRequest; 
     if (castRequest != null) 
     { 
      castRequest.CookieContainer = this.CookieContainer; 
     } 

     return request; 
    } 
} 

EDIT: Il link che mi hai dato utilizza l'autenticazione HTTP POST forme con, non ho il tempo di camminare anche se, ma almeno ti dà un inizio con Google.

+1

ho trovato questo. ma cosa devo fare? devo autenticarmi tramite httpwebrequest o cosa? – MonsterMMORPG

+0

Dipende dal sistema di autenticazione utilizzato dal sito che si sta connettendo. Vedi alcune delle altre risposte sui suggerimenti per l'autenticazione di –

+1

Vorrei che questo post includesse un esempio sull'effettivo processo di autenticazione stesso. – Shimmy

-1

Dai un'occhiata all'utilizzo della proprietà Credentials. Per esempio. se viene utilizzata l'autenticazione di base, sarà necessario impostare la proprietà su un'istanza di NetworkCredential con il nome utente e la password corretti.

Il sample indicava come utilizzare le credenziali utente attualmente connesse per la richiesta.

+1

non funziona :( – MonsterMMORPG

+0

Okey, vedo. Il server utilizza l'autenticazione basata su form, che richiede l'inserimento del nome utente e della password nell'URL dell'azione specificato nella pagina di accesso html. È inoltre necessario utilizzare un contenitore di cookie per ricevere l'autenticazione cookie che viene fornito con la risposta a quel post. –

+0

@MonsterMMORPG 'DoesNotWorkNullReferenceException' – C4u