0

VisualStudio2010と.NETFramework4.0を使用しています。

コード:

public void LoginTo(string username, string password)
    {
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(this.Url + "login.php");
        string values =
            "username=" + username +
            "&password=" + password +
            "&redirect=" +
            "&autologin=on" +
            "&login=Log in";

        req.Method = "POST";
        req.ContentType = "application/x-www-form-urlencoded";
        req.ContentLength = values.Length;
        req.KeepAlive = true;
        req.UserAgent = "Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20100101 Firefox/4.0";
        CookieContainer a = new CookieContainer();
        Uri uri = new Uri(this.Url);

        req.CookieContainer = a;

        ServicePointManager.Expect100Continue = false; // prevents 417 error

        using (StreamWriter writer = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.Default))
        {
            writer.Write(values);
        }

        HttpWebResponse response = (HttpWebResponse)req.GetResponse();
        StreamReader reader = new StreamReader(response.GetResponseStream());

        formResponseWatcher formResponseWatcher = new formResponseWatcher();
        formResponseWatcher.SetResponseContent(reader.ReadToEnd());
        formResponseWatcher.Show();

        foreach (Cookie cookie in response.Cookies)
        {
            cookie.HttpOnly = true;
            Cookie = Cookie + cookie + ";";
        }
    }

問題は、CookieContainerにすべてのCookieが含まれていないことです。Firefoxには5つのCookieがありますが、CookieContainerは3つしか取得しません。常にすべてのCookieにログインする必要があります。.domain.comのようなドメインには問題があると思います。助けて!

4

1 に答える 1

1

考えられるケース:

  • サーバーから返されるCookieは3つだけです。他のCookieは、JavaScriptコードで設定されるか、他のリクエストによって設定されます
  • set-cookieヘッダーは、.Netが解析に失敗するほど不正な形式ですが、Firefoxでは問題ありません(これは好ましくないケースです)。
  • また、ブラウザがサーバーにCookieを追加させる追加情報(リファラーヘッダーなど)を送信する可能性もあります。

Fiddlerまたはその他のHTTPウォッチャーツールを使用して、サーバーからブラウザーおよびアプリケーションにどのような応答が来るかを確認してください。サーバーが3つのCookieを返す可能性があります。

于 2011-04-01T22:38:13.910 に答える