【问题标题】:Making Web Requests in .NET and waiting for server to return full results在 .NET 中发出 Web 请求并等待服务器返回完整结果
【发布时间】:2015-09-28 11:36:42
【问题描述】:

我正在研究一种粗略的方法来测试 Web 应用程序的性能。基本上,我想从 .NET 向返回一些结果的特定 URL 执行 Web 请求。我遇到的问题是我似乎得到了某种类型的中间页面作为结果;结果应该是来自数据库的对象列表,页面标题为“高级搜索结果”,但我的代码正在提供标题为“正在工作...”的内容。我最初试图在 PowerShell 中执行此操作,并且似乎得到了相同的结果,所以我认为我在 C# 中可能会有更好的运气。这是我目前所拥有的:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Net;
    using System.Net.Http;
    using System.IO;

    namespace QTesting
    {
        class Program
        {
            static void Main(string[] args)
            {
                WebRequest wr = WebRequest.Create("https://u.spart.com/u.Int/AdvSearchResults/Person/220001305");
                wr.Method = "GET";
                wr.Credentials = CredentialCache.DefaultCredentials;
                WebResponse response = wr.GetResponse();
                Console.WriteLine(((HttpWebResponse)response).StatusDescription);
                Stream dataStream = response.GetResponseStream();
                StreamReader reader = new StreamReader(dataStream);
                string responseFromServer = reader.ReadToEnd();
                Console.WriteLine(responseFromServer);
                reader.Close();
                response.Close();
            }
        }
    }

最终,如果我能做到这一点,我想收集返回这些结果所需的时间。

谢谢!

托尼

【问题讨论】:

  • 好的,所以从捕获 Fiddler 中的流量来看,有一个 200 结果是“等待...”页面,然后是 302,然后是另一个 200,其中包含所有数据我在寻找。这不是说它正在重定向吗?
  • 进一步分析表明它正在重定向,因为如果我关闭来自 Safari Jones 推荐的重定向,结果来自 302 页面......它必须是某种 Ajax 或 JS 运行填充page... 我会从原始页面中寻找什么属性来发送后续请求?那不是 ResponseUri 吗?在获得 ResponseUri 后,我尝试启动另一个 WebRequest 并且得到相同的结果......我需要以某种方式发出请求吗?
  • 啊,我想我已经确定了问题所在。有一个正在提交的隐藏表单。我将不得不更深入地研究这个......有谁知道发布到网络服务器或完整的来回过程的任何好的例子?

标签: .net c#-4.0 performance-testing


【解决方案1】:

很可能该页面使用了 AJAX,并且您首先得到一个空白页面,其标题为“Working...”,当加载结果时,该页面被 JS 代码替换。 您必须使用像 Fiddler 这样的代理来识别 JS 代码发送到目标网站的请求,然后将其添加到您的测试代码中:我的意思是您的代码必须先请求原始页面,然后再请求新 URL。新的 URL 很容易用 JSON 对象回答。 通过这种方式,您将模拟整个页面加载服务器端。 另一种方法是使用模拟真实浏览器的 Selenium,您无需关心 JS 的功能。这对于功能测试是可行的,但对于大规模负载测试是不可行的,因为您可以在您的机器上生成的 Selenium 驱动程序的数量是有限的

【讨论】:

  • 我得试试这个。你有关于硒的任何资源来完成这个吗?我以前从未使用过...谢谢!
  • 对不起,我一般都是按照第一种方法的
【解决方案2】:

尝试启用重定向:

 WebRequest wr = WebRequest.Create("https://u.spart.com/u.Int/AdvSearchResults/Person/220001305");
 wr.MaximumAutomaticRedirections=10;
 wr.AllowAutoRedirect=true;

很多网站在你没有意识到的情况下重定向,默认情况下 WebRequest 不会。但是您可以按照上述方式启用它。最大值只是一个占位符,您可以根据需要增加或减少它,但我建议您保留它以避免无限重定向或重定向循环。

【讨论】:

  • 我试过了,但 Visual Studio 说 WebRequest 不包含 MaximumAutomaticRedirections 或 AllowAutoRedirection...有什么想法吗?
  • 啊,没关系,我把 WebRequest 包裹在 HttpWebRequest 中,所有的错误都清除了,但还是不行……标题还是“Working……”
猜你喜欢
  • 2023-04-05
  • 2016-04-13
  • 2021-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多