Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#同一PHP会话中的多个http请求_C#_Php_Http_Httprequest - Fatal编程技术网

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

C#同一PHP会话中的多个http请求,c#,php,http,httprequest,C#,Php,Http,Httprequest,我试图让图片加载到发送POST请求的同一个PHP会话中。 但因为我使用的是按钮1,所以这是不可能的。 结果是在发送数据之前加载图片。 如果你有任何问题,请提问 我知道我在加载图片时出错了,但我不知道具体在哪里 使用visual c#2010 express winforms private void Form1_Load(object sender, EventArgs e) { pictureBox1.ImageLocation = "http://localhost/

我试图让图片加载到发送POST请求的同一个PHP会话中。 但因为我使用的是按钮1,所以这是不可能的。 结果是在发送数据之前加载图片。 如果你有任何问题,请提问

我知道我在加载图片时出错了,但我不知道具体在哪里

使用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          
    }
如何将图像的渲染置于第二个请求之下

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服务器请求
level14.php

您无法使用同一会话获取这两个请求,因为它们来自两台不同的机器


您可能希望将
HttpWebRequest
代码从后端移出,并在客户端将其作为AJAX请求重新实现。然后这两个请求都将来自客户端的浏览器。

如果您修改代码以匹配

 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          
    }
这将使用同一会话向服务器发出两个请求


希望这能有所帮助。

我在这里假设您希望在单击按钮时重新加载图像

首先,
ImageLocation
属性可能不尊重您的会话cookie,因此您可能必须手动下载图像。您已经使用了
CookieContainer
,这是一个好的开始

我们想在这里做的是使用一个新的
HttpWebRequest
下载图像,并将相同的
CookieContainer
附加到图像上,因为此图像应该在您第一次调用后保存会话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());

}

我认为php和C不应该像这样重叠。:)你这是什么意思…我想避免使用客户端浏览器,imma尝试在第二个请求下呈现它