C#WebRequest获取/发布

C#WebRequest获取/发布,c#,webrequest,C#,Webrequest,所以我想是时候学C了,对我来说,伙计们,我对这很陌生 我正在尝试创建一个非常简单的应用程序(我使用的是Windows窗体应用程序)。 我的目标是: 使用“GET”方法,获取网页 读取文本字段(该值在用户每次访问页面时都会更改) 使用“POST”方法,相应地发送一些值 以下是我目前的代码: private void button2_Click(object sender, EventArgs e) { string URI = "http://localhost/post.php";

所以我想是时候学C了,对我来说,伙计们,我对这很陌生

我正在尝试创建一个非常简单的应用程序(我使用的是Windows窗体应用程序)。 我的目标是:

  • 使用“GET”方法,获取网页
  • 读取文本字段(该值在用户每次访问页面时都会更改)
  • 使用“POST”方法,相应地发送一些值
  • 以下是我目前的代码:

      private void button2_Click(object sender, EventArgs e)
    {
        string URI = "http://localhost/post.php";
        string myParameters = "field=value1&field2=value2";
    
        using (WebClient wc = new WebClient())
        {
            string getpage = wc.DownloadString("http://localhost/post.php");
            MessageBox.Show(getpage);
            wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
            string HtmlResult = wc.UploadString(URI, myParameters);
            MessageBox.Show(HtmlResult);
        }
    }
    
    到目前为止,一切都很好,但这并不完全是我想要实现的。 我可以使用POST方法,但在发送数据之前如何使用GET? 我想根据得到的结果发送数据

    请让我知道,我是否应该给一个更好的描述,我试图做什么

    谢谢

    编辑
    这是我的PHP代码:

    <?php
    
        $a = session_id();
    
        if(empty($a))
            session_start();
    
            echo "Session: ".session_id()."<br/>\n";
    
    使用GET读取数据
    请参阅以下答案:

    会议 默认情况下,WebClient不使用任何会话。因此,每次呼叫都会像创建新会话一样进行处理。要做到这一点,您需要以下操作:

    请参阅以下答案:

  • 示例代码
    GET
    方法实际上只是通过地址行传递的参数,只需将您的请求发送到
    string.Format(“{0}{1}”,URI,myParameters)
    (或
    URI+”?“+myParameters
    )并简单地读取响应即可。

    我很久以前就知道了,但是:

           byte[] readedData = null;
    
            await Task.Run(async() =>
            {
                using (WebClient client = new WebClient())
                {
                    client.DownloadProgressChanged += (obj, args) => progessChangedAction?.Invoke(args.ProgressPercentage);
    
                    readedData = await client.DownloadDataTaskAsync(requestUri).ConfigureAwait(false);
                }
            });
    
            return readedData;
    

    }

    我想他是在问如何使用WebClient类中的GET功能,这样他就可以获取数据,然后根据这些数据撰写一篇文章。我想知道这是否有效……因为它们需要在同一个会话中进行。编辑:Pseudo Coder,这正是我的目标。嗨,伙计们,我仍然无法理解这一点。它仍然算作一个不同的会话。妈ybe最好的比较是我们的浏览器(例如Chrome)。您打开一个页面,然后提交其中的表单。没有刷新或其他任何内容。您是否阅读了我关于会话的第二个链接?您必须正确设置客户端才能使用CookieContainer处理会话。要使用会话,您必须使用cookie。访问url时,会创建会话。会话ID作为cookie提供。Yo您的客户端需要保存此cookie并在下次发送,以便您的会话可以恢复。如果您在“我的第二个链接”中使用客户端,您的请求应与cookie一起工作,从而恢复会话。您是否尝试过?尽管您的第2点有点混乱。阅读页面以获取用户输入的最终目标是什么。如果ser输入数据您的数据库中没有数据吗?我想这取决于您的
    PHP
    脚本。我理解您的问题的方式是,您希望使用
    GET
    POST
    方法组合向页面发送一些数据。如果是这种情况,我不明白为什么不在同一个会话中。但是如果您不想这样做o通过
    GET
    发送内容,然后根据页面的响应,使用
    POST
    创建另一个请求,我相信这将是一个单独的请求。如果会话的含义与浏览器中的会话相同,那么有一种处理方法(cookie等),但如果我不记得了…我编辑了我的主要帖子,如果你能猜出问题出在哪里,请查看
    public class CookieAwareWebClient : WebClient
    {
        private readonly CookieContainer m_container = new CookieContainer();
    
        protected override WebRequest GetWebRequest(Uri address)
        {
            WebRequest request = base.GetWebRequest(address);
            HttpWebRequest webRequest = request as HttpWebRequest;
            if (webRequest != null)
            {
                webRequest.CookieContainer = m_container;
            }
            return request;
        }
    }
    
    // ...
    
    private void button2_Click(object sender, EventArgs e)
    {
        string URI = "http://localhost/post.php";
        string myParameters = "field=value1&field2=value2";
    
        using (WebClient wc = new CookieAwareWebClient())
        {
            string getpage = wc.DownloadString("http://localhost/post.php");
            MessageBox.Show(getpage);
            wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
            string HtmlResult = wc.UploadString(URI, myParameters);
            MessageBox.Show(HtmlResult);
        }
    }
    
           byte[] readedData = null;
    
            await Task.Run(async() =>
            {
                using (WebClient client = new WebClient())
                {
                    client.DownloadProgressChanged += (obj, args) => progessChangedAction?.Invoke(args.ProgressPercentage);
    
                    readedData = await client.DownloadDataTaskAsync(requestUri).ConfigureAwait(false);
                }
            });
    
            return readedData;