C# 捕获HTTP流量

C# 捕获HTTP流量,c#,http,C#,Http,短版本: 我希望确保请求URL(部分匹配)(客户端) 长版本: 我希望自动化我的部分测试。目前我使用Fiddler2手动验证 以下是场景: 用户导航到站点A 我的应用程序使用跟踪URL重定向(见Fiddler的HTTP流量) 用户最终到达站点A,参数现在已应用 我想在C#中验证第2步是通过进行部分匹配(例如包含{string})实现的 问题: 我该怎么做?我已经开始研究HttpWebRequest类和FiddlerCore,但我喜欢使用最简单的代码(因此其他团队成员可以在需要时进行更新),这让我

短版本:
我希望确保请求URL(部分匹配)(客户端)

长版本:
我希望自动化我的部分测试。目前我使用Fiddler2手动验证

以下是场景:

  • 用户导航到站点A
  • 我的应用程序使用跟踪URL重定向(见Fiddler的HTTP流量)
  • 用户最终到达站点A,参数现在已应用
  • 我想在C#中验证第2步是通过进行部分匹配(例如包含{string})实现的

    问题:
    我该怎么做?我已经开始研究
    HttpWebRequest
    类和
    FiddlerCore
    ,但我喜欢使用最简单的代码(因此其他团队成员可以在需要时进行更新),这让我问StackOverflow的用户会推荐什么。

    看看。它是基于pcap(Windows上的WinPcap)的,这是一个由流行应用程序使用的数据包捕获库

    有一个关于CodeProject的非常棒的教程,其中包含了许多示例代码,可以帮助您入门:


    一旦您掌握了数据包(SharpPcap会捕获数据包,而不是解析数据包),您就可以使用它将数据包解析为可用的内容(在您的情况下是HTTP通信)。

    听起来您想要嗅探HTTP流量。您可以使用winpcap之类的数据包捕获驱动程序,导入该DLL并进行测试,或者使用@SimpleCoder提到的SharpPcap


    最省力的路径是写一个,检查请求并在必要时重定向

    编辑:在我阅读问题时,没有将#2作为中间URL,看起来它是(唯一)重定向操作。根据您的需要,您可以使用Selenium读取页面引用并获得重定向

    WebDriver;//分配到别处
    JavascriptExecutor js=(JavascriptExecutor)驱动程序;
    //调用任何javascript
    var referer=js.executeScript(“document.referer”);
    

    我建议您使用C#进行所有网站/应用程序测试。它与NUnit、MSTest和其他测试框架集成得非常好,非常易于使用

    使用SeleniumWebDriver,您将从C#测试代码启动一个自动浏览器实例(Firefox、Chrome、Internet Explorer、PhantomJS和其他)。然后,您将使用简单的命令控制浏览器,如“转到url”或“在输入框中输入文本”或“单击按钮”

    它对其他开发人员也没有太多要求——他们只需要运行测试套件,并且假设他们安装了浏览器,它就可以工作了。我已经成功地将它用于开发团队中的数百个测试,每个开发团队都有不同的浏览器首选项(甚至对于测试,我们每个人都进行了调整)和团队构建服务器

    对于这个测试,我将在步骤3中读取url

    下面是一些示例代码,改编自。由于我不知道您要查找的URL或
    {string}
    (“本例中的奶酪”),因此示例没有太大变化

    使用OpenQA.Selenium;
    使用OpenQA.Selenium.Firefox;
    //需要对WebDriver.Support.dll的引用
    使用OpenQA.Selenium.Support.UI;
    类重定向ThenReadUrl
    {
    静态void Main(字符串[]参数)
    {
    //创建Firefox驱动程序的新实例。
    //请注意,代码的其余部分依赖于接口,
    //而不是执行。
    //进一步注意,其他驱动程序(InternetExplorerDriver、,
    //ChromeDriver等)将需要进一步配置
    //在此示例开始之前,请参阅wiki页面了解
    //个别司机http://code.google.com/p/selenium/wiki
    //以获取更多信息。
    IWebDriver=新的FirefoxDriver();
    //请注意,导航与Java版本略有不同
    //这是因为“get”在C中是一个关键字#
    driver.Navigate().gotour(“http://www.google.com/");
    //打印原始URL
    System.Console.WriteLine(“页面url为:“+driver.url”);
    //@kirbycope:在你的情况下,重定向发生在这里-你只有
    //在读取新值之前等待加载新页
    //等待页面加载,10秒后超时
    WebDriverWait wait=新的WebDriverWait(驱动程序,TimeSpan.FromSeconds(10));
    wait.Until((d)=>{return d.Url.ToLower().Contains(“cheese”);});
    //打印重定向的URL
    System.Console.WriteLine(“页面url为:“+driver.url”);
    //关闭浏览器
    driver.Quit();
    }
    }
    
    跟进: 我最终使用Telerik的代理发送HTTP请求,并通过C#解析响应。这是一篇用作跳板的文章:


    您是否考虑过使用类似selenium RC的东西,而不是通过浏览器执行此操作?这可能比检查交通量少。是的,我使用Telerik测试工作室。问题是,我在步骤2中的URL只在浏览器地址栏中出现了一瞬间。我的目标是监视/嗅探流量,这样我就可以确保在我的示例的第3步中在URL上结束之前,URL被命中。不过,谢谢!谢谢你的回复。然而,我们已经使用了一个名为Telerik的自动化套件。问题是,这不像访问URL并等待片刻那么容易。这是因为我正在寻找的URL是一种中间人,您的解决方案(上面)将在我的示例的步骤3中显示URL,而不是步骤2中显示的URL。谢谢您的回复。我将研究SharpPcap,因为我可以在我的自动化套件中作为测试步骤运行C#代码。不幸的是,为了让C#应用程序正常工作,必须运行一个安装程序/谢谢你的回复。我将放弃Fiddler路由,因为调用外部服务将导致我的自动化软件出现问题,因为它没有“阻止操作”来告诉测试脚本等待其他进程,然后继续下一个自动化步骤