C#在页面完全加载时捕获HTTP响应

时间:2016-02-01 10:56:26

标签: c# http post

我想发送一个http post请求并捕获响应。我写了以下代码。

System.Net.WebRequest req = System.Net.WebRequest.Create(URI);
   req.Proxy = new System.Net.WebProxy(ProxyString, true);
   //Add these, as we're doing a POST
   req.ContentType = "application/x-www-form-urlencoded";
   req.Method = "POST";
   //We need to count how many bytes we're sending. 
   //Post'ed Faked Forms should be name=value&
   byte [] bytes = System.Text.Encoding.ASCII.GetBytes(Parameters);
   req.ContentLength = bytes.Length;
   System.IO.Stream os = req.GetRequestStream ();
   os.Write (bytes, 0, bytes.Length); //Push it out there
   os.Close ();
   System.Net.WebResponse resp = req.GetResponse();
   if (resp== null) return null;
   System.IO.StreamReader sr = 
         new System.IO.StreamReader(resp.GetResponseStream());
   return sr.ReadToEnd().Trim();

更新1:

我尝试使用PostAsync方法。结果仍然相同。

public static async void Req()
        {
            using (var client = new HttpClient())
            {
                var values = new Dictionary<string, string>
    {
       { "type1", "val1" },
       { "type2", "val2" },
       { "type3", "val3"}
    };
                var content = new FormUrlEncodedContent(values);
                var r1 = await client.PostAsync(URL, content);

                var responseString = await r1.Content.ReadAsStringAsync();
                Console.WriteLine(responseString);
                Console.ReadLine();
            }
        }

但它只捕获部分反应。我的页面需要10-12秒才能加载。如何让我的脚本等待并捕获完整的响应?

2 个答案:

答案 0 :(得分:0)

这可能是因为响应是以其他编码方式编码,然后是StreamReader默认的UTF8编码。请检查响应的编码并从

更改对streamreader的调用
new System.IO.StreamReader(resp.GetResponseStream());

new System.IO.StreamReader(resp.GetResponseStream(), Encoding.ASCII);

用于ASCII编码

答案 1 :(得分:0)

工作代码。只需将正确的参数传递给方法即可。

strcpy
相关问题