C# WebRequest GET/POST

本文关键字:POST GET WebRequest | 更新日期: 2023-09-27 18:26:15

所以我觉得是时候学习C#了,对我来说很容易,伙计们,我对此很陌生。

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

  1. 使用"GET"方法,获取网页
  2. 读取文本字段(每次用户访问页面时,此值都会更改
  3. 使用"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?我想根据GET结果发送数据。

请让我知道我是否应该更好地描述我正在努力做的事情。

谢谢。

编辑
这是我的PHP代码:

<?php
    $a = session_id();
    if(empty($a))
        session_start();
        echo "Session: ".session_id()."<br/>'n";

现在,回到我的C#代码,我在

C# WebRequest GET/POST

这两条消息中得到了不同的会话ID

使用GET读取数据

请参考这个答案:在.NET 中从URL读取字符串的最简单方法

using(WebClient client = new WebClient()) {
    string s = client.DownloadString(url);
}

会话

默认情况下,WebClient不使用任何会话。因此,每个呼叫都会像创建了一个新会话一样进行处理。要做到这一点,你需要这样的东西:

请参考以下答案:

  1. 在WebClient类中使用CookieContainer

  2. 使用HTTP WEB REQUEST 从URL读取响应

示例代码

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);
    }
}

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;

}