带有Fiddler代理和HTTP身份验证的C#PhantomJSDriver:未捕获流量

时间:2014-01-27 23:03:33

标签: c# authentication selenium phantomjs fiddlercore

我正在尝试导航到localhost站点上的应用程序,该站点需要使用PhantomJSDriver进行身份验证并将username:password传递到URL。为了捕获响应代码,我使用了Jim Evan的例子https://github.com/jimevans/WebDriverProxyExamples中的Fiddler代理。

PhantomJSDriver成功导航(使用NTLM / Basic身份验证)但 Fiddler无法捕获流量。

public static int NavigateTo(this IWebDriver driver, string targetUrl, TimeSpan timeout, bool printDebugInfo)
{
    int responseCode = 0;
    DateTime endTime = DateTime.Now.Add(timeout);
    SessionStateHandler responseHandler = delegate(Session targetSession)
    {
        if (targetSession.responseCode >= 300 && targetSession.responseCode < 400)
        {
            targetUrl = targetSession.GetRedirectTargetURL();
        }
        else
            responseCode = targetSession.responseCode;
    };

    // Attach the event handler, perform the navigation, and wait for
    // the status code to be non-zero, or to timeout. Then detach the
    // event handler and return the response code.
    FiddlerApplication.AfterSessionComplete += responseHandler;
    driver.Url = targetUrl;
    while (responseCode == 0 && DateTime.Now < endTime)
    {
        System.Threading.Thread.Sleep(100);
    }

    FiddlerApplication.AfterSessionComplete -= responseHandler;
    return responseCode;
}

当使用具有相同应用程序的ChromeDriver以及不需要使用PhanotmJSDriver进行身份验证的网站时,我能够捕获流量。它无法使用的唯一场景是PhantomJSDriver +身份验证网站。

更新 我发现这个问题归功于 Dead Link <击> http://docs.telerik.com/fiddler/observe-traffic/troubleshooting/notraffictolocalhost/ 。这与身份验证无关,而是从localhost获取流量。

解决方案是使用本地计算机名代替URL中的localhost。

1 个答案:

答案 0 :(得分:1)

感谢http://docs.telerik.com/fiddler/observe-traffic/troubleshooting/notraffictolocalhost/,我发现了这个问题。它与身份验证无关,而是从localhost获取流量。我不知道为什么,但似乎使用PhantomJSDriver导航到localhost url和Fiddler捕获流量的组合不起作用。

解决方案是使用本地MACHINE NAME代替URL中的“localhost”。