C#多个http请求同一个PHP会话

问题描述

| 我正在尝试将图片加载到将发送POST请求的同一PHP会话中。 但是由于我使用的是button1_Click,所以这是不可能的。 结果是在发送数据之前先加载图片。 如果您有任何疑问,请询问。 我知道我加载图片时出错,但是我不知道确切的位置。 使用Visual C#2010 Express WinForms
private void Form1_Load(object sender,EventArgs e)
    {
        pictureBox1.ImageLocation = \"http://localhost/proj/guess-my-fav/1.jpg\";
    }
    private void button1_Click(object sender,EventArgs e)
    {
        Uri uri = new Uri(\"http://localhost/proj/guess-my-fav/level14.php\");
        var answer = textBox1.Text;
        string data = \"guess=\" + answer + \"&level=14&time=opt\";
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
        request.Method = WebRequestMethods.Http.Post;
        request.CookieContainer = new CookieContainer();
        request.KeepAlive = true;
        request.ContentLength = data.Length;
        request.ContentType = \"application/x-www-form-urlencoded\";
        StreamWriter writer = new StreamWriter(request.GetRequestStream());
        writer.Write(data);
        writer.Close();
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        StreamReader reader = new StreamReader(response.GetResponseStream());
        string tmp = reader.ReadToEnd();
        response.Close();
        richTextBox1.AppendText(tmp); // log - delete this line          
    }
如何将图像渲染置于第二个请求下?     

解决方法

如果您修改代码以使其匹配
 private CookieContainer cookieContainer;

        private void Form1_Load(object sender,EventArgs e)
        {

            var wr = (HttpWebRequest)WebRequest.Create(\"http://localhost/proj/guess-my-fav/1.jpg\");
            cookieContainer = new CookieContainer();
            wr.CookieContainer = this.cookieContainer;
            var resp = (HttpWebResponse)wr.GetResponse();
            wr.CookieContainer = cookieContainer;
            using (var s = resp.GetResponseStream())
            {
                pictureBox1.Image = new Bitmap(s);
            }
        }



private void button1_Click(object sender,EventArgs e)
    {
        Uri uri = new Uri(\"http://localhost/proj/guess-my-fav/level14.php\");
        var answer = textBox1.Text;
        string data = \"guess=\" + answer + \"&level=14&time=opt\";
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
        request.Method = WebRequestMethods.Http.Post;
        request.CookieContainer = cookieContainer;
        request.KeepAlive = true;
        request.ContentLength = data.Length;
        request.ContentType = \"application/x-www-form-urlencoded\";
        StreamWriter writer = new StreamWriter(request.GetRequestStream());
        writer.Write(data);
        writer.Close();
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        StreamReader reader = new StreamReader(response.GetResponseStream());
        string tmp = reader.ReadToEnd();
        response.Close();
        richTextBox1.AppendText(tmp); // log - delete this line          
    }
这应该使用相同的会话向服务器发出两个请求。 希望这可以帮助。     ,
pictureBox1.ImageLocation = \"http://localhost/proj/guess-my-fav/1.jpg\";
这将导致客户端的浏览器请求
1.jpg
Uri uri = new Uri(\"http://localhost/proj/guess-my-fav/level14.php\");
...
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
这将导致运行ASP.NET网站的Web服务器发出ѭ5请求。 您不会使用相同的会话来获得这两个请求,因为它们将来自两台不同的机器! 您可能希望研究将
HttpWebRequest
代码移出后端,然后将其作为AJAX请求在客户端重新实现。然后,两个请求都将来自客户端的浏览器。     ,我在这里假设您要在单击按钮时重新加载图像。 首先,“ 7”属性可能不会尊重您的会话Cookie,因此您可能必须手动下载映像。您已经使用了
CookieContainer
,所以这是一个不错的开始。 我们在这里要做的是使用一个新的ѭ6下载图像并将其附加到ѭ8上,因为该图像应在您首次通话后保存会话ID。 然后,我们可以使用
HttpWebResponse
创建一个
Image
对象并将其分配给
pictureBox1.Image
属性。 所有这些可能看起来像这样:
private void button1_Click(object sender,EventArgs e)
{
    Uri uri = new Uri(\"http://localhost/proj/guess-my-fav/level14.php\");
    var answer = textBox1.Text;
    string data = \"guess=\" + answer + \"&level=14&time=opt\";

    CookieContainer cookies = new CookieContainer(); /* we want to have this for other call also

    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
    request.Method = WebRequestMethods.Http.Post;
    request.CookieContainer = cookies;
    request.KeepAlive = true;
    request.ContentLength = data.Length;
    request.ContentType = \"application/x-www-form-urlencoded\";
    StreamWriter writer = new StreamWriter(request.GetRequestStream());
    writer.Write(data);
    writer.Close();
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    StreamReader reader = new StreamReader(response.GetResponseStream());
    string tmp = reader.ReadToEnd();
    response.Close();
    richTextBox1.AppendText(tmp); // log - delete this line 

    HttpWebRequest request2 = (HttpWebRequest)HttpWebRequest.Create(\"http://localhost/proj/guess-my-fav/1.jpg\");
    request2.CookieContainer = cookies;
    HttpWebResponse response2 = (HttpWebResponse)request.GetResponse();
    pictureBox1.Image = Image.LoadFromStream(response2.GetResponseStream());

}
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...