捕获HTTP流量

时间:2012-09-05 22:08:07

标签: c# http

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

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

以下是该方案:

  1. 用户导航到网站A
  2. 我的应用使用跟踪网址(在Fiddler的HTTP流量中看到)重定向​​
  3. 用户最终在站点A上,现在应用了参数。
  4. 我想在C#中验证步骤2是通过进行部分匹配(例如包含{string})来实现的。

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

4 个答案:

答案 0 :(得分:7)

看看SharpPcap。它基于pcap(Windows上的WinPcap),它是受欢迎的Wireshark使用的数据包捕获库。

CodeProject上有一个很棒的教程,有许多示例代码可以帮助您入门:http://www.codeproject.com/Articles/12458/SharpPcap-A-Packet-Capture-Framework-for-NET

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

答案 1 :(得分:1)

编辑:当我阅读问题时,没有看到#2作为中间网址,它看起来像是(唯一的)重定向操作。根据您的browser of choice, and the type of redirect performed,您可以使用Selenium来阅读页面引荐来获取重定向。

WebDriver driver; // Assigned elsewhere
JavascriptExecutor js = (JavascriptExecutor) driver;

// Call any javascript
var referrer = js.executeScript("document.referrer");

我建议您在C#中使用Selenium Webdriver来满足您的所有网站/应用测试需求。它与NUnit,MSTest和其他测试框架非常完美地集成 - 它非常易于使用。

使用Selenium Webdriver,您将从C#测试代码启动自动浏览器实例(Firefox,Chrome,Internet Explorer,PhantomJS等)。然后,您将使用简单的命令控制浏览器,例如“转到URL”或“在输入框中输入文本”或“单击按钮”。 See more in the API.

它也不需要其他开发人员 - 他们只是运行测试套件,并假设他们安装了浏览器,它将工作。我已成功地使用它,在开发人员团队中进行了数百次测试,每个开发人员都有不同的浏览器偏好(即使是我们每次调整的测试)以及团队构建服务器。

对于此测试,我会go to the url in step 1,然后是wait for a second,并在步骤3中阅读网址。

以下是一些示例代码,改编自Introducing the Selenium-WebDriver API by Example。由于我不知道您要查找的URL和{string}(此示例中为“cheese”),因此样本没有太大变化。

using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;

// Requires reference to WebDriver.Support.dll
using OpenQA.Selenium.Support.UI;

class RedirectThenReadUrl
{
    static void Main(string[] args)
    {
        // Create a new instance of the Firefox driver.

        // Notice that the remainder of the code relies on the interface, 
        // not the implementation.

        // Further note that other drivers (InternetExplorerDriver,
        // ChromeDriver, etc.) will require further configuration 
        // before this example will work. See the wiki pages for the
        // individual drivers at http://code.google.com/p/selenium/wiki
        // for further information.
        IWebDriver driver = new FirefoxDriver();

        //Notice navigation is slightly different than the Java version
        //This is because 'get' is a keyword in C#
        driver.Navigate().GoToUrl("http://www.google.com/");

        // Print the original URL
        System.Console.WriteLine("Page url is: " + driver.Url);

        // @kirbycope: In your case, the redirect happens here - you just have
        // to wait for the new page to load before reading the new values

        // Wait for the page to load, timeout after 10 seconds
        WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
        wait.Until((d) => { return d.Url.ToLower().Contains("cheese"); });

        // Print the redirected URL
        System.Console.WriteLine("Page url is: " + driver.Url);

        //Close the browser
        driver.Quit();
    }
}

答案 2 :(得分:0)

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

最小努力的路径是写FiddlerScript Addon,检查请求并在必要时重定向。

答案 3 :(得分:0)

跟进: 我最终使用Telerik的代理发送HTTP请求并通过C#解析响应。这是用作跳板的文章:

https://docs.telerik.com/teststudio/advanced-topics/coded-samples/general/using-the-http-proxy