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
相关产品推荐
相关产品推荐

