0

ウェブフォーム:

<form id="form1" runat="server">
    <div>
        <asp:TextBox ID="txtBxEmail" runat="server"></asp:TextBox>
        <asp:TextBox ID="txtBxPassword" runat="server"></asp:TextBox>
        <asp:Button ID="btnLogin" runat="server" Text="Login" OnClick="btnLogin_Click" />
        <br /><br />
        <asp:TextBox ID="txtBxLink" runat="server" Text="http://example.com/elements/13579642/"></asp:TextBox>
        <asp:Button ID="btnDisplay" runat="server" Text="Display" OnClick="btnDisplay_Click" />
        <br /><br />
        <asp:TextBox ID="txtBxSource" runat="server" TextMode="MultiLine" Width="600" Height="600"></asp:TextBox>
        </div>
    </form>

コードビハインド:

protected void Page_Load(object sender, EventArgs e)
    {

    }

    CookieContainer loginCookie;

    public void btnLogin_Click(object sender, EventArgs e)
    {
        string postData = "type=0&user=" + txtBxEmail.Text + "&password=" + txtBxPassword.Text + "&remember=0";
        CookieContainer tempCookies = new CookieContainer();
        UTF8Encoding encoding = new UTF8Encoding();
        byte[] byteData = encoding.GetBytes(postData);

        HttpWebRequest postReq = (HttpWebRequest)WebRequest.Create("http://example.com/ajax/login.ajax.php");
        postReq.Method = "POST";
        postReq.KeepAlive = true;
        postReq.CookieContainer = tempCookies;
        postReq.ContentType = "application/x-www-form-urlencoded";
        postReq.Referer = "http://example.com/ajax/login.ajax.php";
        postReq.UserAgent = "Opera/9.80 (Windows NT 6.1; U; en) Presto/2.10.229 Version/11.61";
        postReq.ContentLength = byteData.Length;

        Stream postreqstream = postReq.GetRequestStream();
        postreqstream.Write(byteData, 0, byteData.Length);
        postreqstream.Close();
        HttpWebResponse postresponse = null;

        postresponse = (HttpWebResponse)postReq.GetResponse();
        tempCookies.Add(postresponse.Cookies);
        loginCookie = tempCookies;
        StreamReader postreqreader = new StreamReader(postresponse.GetResponseStream());
    }

    public void btnDisplay_Click(object sender, EventArgs e)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(txtBxLink.Text);
        request.CookieContainer = loginCookie;
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        StreamReader reader = new StreamReader(response.GetResponseStream());
        string linkSourceCode = reader.ReadToEnd();

        txtBxSource.Text = linkSourceCode;
    }

http://example.com/elements/13579642/サブページを表示するには、ログインする必要があります。[表示] ボタンをクリックするtxtBxSourceと、要素のソース コードが表示されるはずですが、表示されません。代わりに、http://example.com/home/ソース コードが表示されます。コード全体を移動するとpublic void btnLogin_Clickすべてが機能しますが、そうでない場合は機能しません。

  1. 私の問題の解決策は何ですか?

  2. 質問:すべてを Web サイト/Web ホストに配置し、誰かが (この Web ページを介して) http://example.com/ Web サイトにログインし、このミニ アプリケーション、http: //example.com/ウェブサイトは自分の IP またはウェブホスト IP を受け取りますか?

4

1 に答える 1

0

あなたが持っている問題は、ページがポストバックにあるとき、CookieContainerの情報が明確であるということです。Yoは、これを2つの方法で修正して、ポストバック時に影響を与えないCookieContainerのビューステートを作成するか、複数のサブスクリプトを使用してスクリプトを作成できます。2番目のボタンのスクリプト用に個別のパブリックボイドを作成し、シーケンスのように最初のボタンでこのスクリプトを呼び出すことができます。

于 2012-05-10T14:11:29.790 に答える