You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何判断HTTP POST请求是否成功及获取响应、保持会话

解决WebClient POST请求的成功判断、响应获取及会话保持问题

嘿,我来帮你搞定这几个问题,结合你的代码一步步说:

1. 判断POST请求是否成功

WebClient的UploadValues方法在遇到HTTP错误状态码(比如404、500、403这类)时,会直接抛出WebException。所以你可以通过try-catch块来捕获异常,进而判断请求是否成功:

try
{
    var response_data = client.UploadValues(url_add_to_cart, method, parameters);
    // 走到这里说明请求成功(HTTP状态码2xx)
    Console.WriteLine("POST请求成功!");
}
catch (WebException ex)
{
    // 捕获到异常,说明请求失败,可以获取具体的状态码
    if (ex.Response is HttpWebResponse errorResponse)
    {
        Console.WriteLine($"请求失败,状态码:{(int)errorResponse.StatusCode} {errorResponse.StatusDescription}");
        errorResponse.Close();
    }
}

2. 获取请求后的网站HTML代码

UploadValues返回的response_data是字节数组,你只需要用对应的编码把它转换成字符串就行。大多数网站用UTF-8编码,你可以这么处理:

// 在请求成功的代码块里添加:
string html = Encoding.UTF8.GetString(response_data);
// 现在html变量就是返回的网页内容了
Console.WriteLine(html);

如果发现乱码,可能是网站用了其他编码(比如GB2312),可以换成Encoding.GetEncoding("GB2312")试试。

3. 用同一个WebClient保持会话发送后续POST请求

完全可以!WebClient内部会自动维护会话的Cookie信息,只要你复用同一个WebClient实例,后续的请求就会带上之前的会话Cookie,和服务器保持同一会话。比如:

// 第一个POST请求(你的原有代码,加上try-catch和HTML获取)
try
{
    var response_data = client.UploadValues(url_add_to_cart, method, parameters);
    string html = Encoding.UTF8.GetString(response_data);
    Console.WriteLine("第一个POST请求成功,响应HTML已获取");

    // 准备第二个POST请求的参数
    var secondParameters = new NameValueCollection();
    secondParameters.Add("key1", "value1");
    secondParameters.Add("key2", "value2");

    // 发送第二个POST请求,用同一个client实例
    var secondResponse = client.UploadValues(secondUrl, "POST", secondParameters);
    string secondHtml = Encoding.UTF8.GetString(secondResponse);
    Console.WriteLine("第二个POST请求成功,响应HTML已获取");
}
catch (WebException ex)
{
    // 异常处理逻辑
}

这样两个请求就会共享同一个会话啦。

内容的提问来源于stack exchange,提问作者lucky simon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:39:57