2011-01-19 24 views
29

C#でWebClientオブジェクトを使用して何かをダウンロードしたいのですが、ダウンロードドメインにログインする必要があります。WebClientを使用してログインしてセッションデータを保持するにはどうすればよいですか?私はWebClientでデータを投稿する方法を知っています。WebClientでサイトにログインするにはどうすればよいですか?

+1

サーバにはどのような認証メカニズムが必要ですか?基本、フォーム、Windows/NTLM? –

+2

私はFirefoxのクッキーから見て、値をmaunally追加することで問題を解決しました:) webClient.Headers.Add( "Cookie"、 "PHPSESSID = xxxxxxx; mosesuser = xxxxxxx;"); – MonsterMMORPG

+0

どちらの値ですか?実際の認証Cookieを意味しますか?その値はおそらく期限切れになり、後で再利用することはできません。 –

答えて

47

問題がある場合は認証できますが、ここで認証Cookieを保持することはWebClientの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:あなたが私を与えたリンクは、HTTP POSTでフォーム認証を使用しています 、私はそれにもかかわらず歩くための時間を持っていないが、少なくともそれはあなたのGoogleとのスタートを与えます。

+1

私はこれを見つけた。しかし、私は何をする必要がありますか? httpwebrequestまたは何で認証する必要がありますか? – MonsterMMORPG

+0

接続しているサイトがどの認証システムを使用しているかによって異なります。 –

+1

この投稿には、実際の認証プロセス自体の例が含まれることを願っています。 – Shimmy

-1

Credentialsプロパティを使用してください。例えば。基本認証を使用する場合は、適切なユーザー名とパスワードを使用して、プロパティーをNetworkCredentialのインスタンスに設定する必要があります。

[sample]は、要求に現在ログオンしているユーザー資格情報を使用する方法を示しています。

+1

が動作しません:( – MonsterMMORPG

+0

Okey、私は参照してください。サーバーはフォーム認証を使用しているため、ログインページhtmlで指定されたアクションURLにユーザー名とパスワードを投稿する必要があります。その投稿への応答に付随するクッキー。 –

+0

@MonsterMMORPG 'DoesNotWorkNullReferenceException' – C4u

関連する問題