1

私は 2 つの URl を持っています。最初の URL を開くと、認証が許可されます。2 番目の URL は、Web コンテンツを XML データとして開きます。そのデータを読み取る必要があります...しかし、最初のURLを実行すると、認証は正常に機能しますが、すぐに2番目のURLを開こうとすると、 Authentication failed と表示されます。最初の URL から 2 番目の URL へのセッションを維持する方法...

私のコード:

string url1 = "http://172.xx.xx.xx:xxxx/cms?login&username=santhu&password=welcom0e";
string url = "http://172.xx.xx.xx:xxxx//cms?status=ProcessStatus";
string result = null;
string result1 = null;
try
{
  WebClient client = new WebClient();
  result = client.DownloadString(url1);

  TextBox1.Text = result.ToString();
  result1 = client.DownloadString(url);
  TextBox2.Text = result1.ToString();
}
catch (Exception ex)
{           
}
4

2 に答える 2

1
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);
        if (request is HttpWebRequest)
        {
            (request as HttpWebRequest).CookieContainer = this.CookieContainer;
        }
        return request;
    }
}

それ以外の場合は、Cookie にFirebugを使用して値を手動で追加することで問題を解決できます:)

webClient.Headers.Add("Cookie", "PHPSESSID=xxxxxxx; mosesuser=xxxxxxx; ");
于 2011-06-23T09:38:51.863 に答える
0

最初のリクエストの「Set-Cookie」レスポンス ヘッダーを覚えておき、2 番目のリクエストで送信する必要があります。

基本的に、最初のリクエストの後 (おそらく DownloadString() の後) でヘッダーを見つける必要がclient.ResponseHeadersあり、それを client.Headers何らかの形で追加する必要があります。

編集: 上記は不可能のようですが、基になる WebRequest インスタンスを変更できます。次の質問を参照してください: WebClient に Cookie を使用させるにはどうすればよいですか?

またはこれ: http://couldbedone.blogspot.com/2007/08/webclient-handling-cookies.html

于 2011-06-23T09:18:18.700 に答える