首页 文章

如何使用Fiddler从TFS客户端捕获HTTP通信

提问于
浏览
1

我有一个示例项目,使用TFS Client lib(Microsoft.TeamFoundation.Build.Client.dll等),我查询构建 .

using (var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection
                                                              (new Uri(tfsServerName)))
{        
    var bs = tfs.GetService<IBuildServer>();
    var buildSpec = bs.CreateBuildDetailSpec(teamProject, buildDefinitionName);
    buildSpec.InformationTypes = null;
    buildSpec.MinFinishTime = DateTime.Now.AddDays(-10);
    buildSpec.Status = BuildStatus.Succeeded;
    var buildDetails = bs.QueryBuilds(buildSpec).Builds;
}

我想在运行该代码时捕获并分析传出的HTTP流量 . 使用Wireshark我看到DLL为服务器定期发送HTTP POST .

Fiddler however doesn't see that traffic. How do I change that?

有用的东西:

我自己做一个类似的电话

new WebClient().DownloadString("http://tfs03te:8080/tfs/DefaultCollection/Build/v4.0/BuildService.asmx");

我试过的事情:

设置GlobalProxySelection(是的,它已经过时了)

GlobalProxySelection.Select = new WebProxy("127.0.0.1", 8888);

设置TFSPROXY环境变量

System.Environment.SetEnvironmentVariable("TFSPROXY","http://127.0.0.1:8888");

在app.config中设置代理

<system.net>
 <defaultProxy enabled = "true" useDefaultCredentials = "true">
     <proxy autoDetect="False" bypassonlocal="False" 
            proxyaddress="http://127.0.0.1:8888" usesystemdefault="False" />
 </defaultProxy> 
</system.net>

在注册表中设置代理

HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0\TeamFoundation\SourceControl\Proxy

我设置

Enabled = True
Proxy = http://127.0.0.1:8888

以上都没有做到这一点 .

分析反编译的TFS客户端

Microsoft.TeamFoundation.Client.Channels.TfsHttpRequestHelpers.PrepareWebRequest()

我看到只有在适当的设置告诉它时才会绕过代理

if (settings.BypassProxyOnLocal && BypassProxyOnLocalHelper.IsHostLocal(webRequest.RequestUri.Host))
{
    webRequest.Proxy = null;
}

(另外服务器甚至不是本地的)

除此之外,在使用TfsHttpRequestHelpers.PrepareWebRequest(更深入的内部使用WebRequest.InternalDefaultWebProxy的默认值)创建请求后,它似乎不会修改该代理值 . 但我一定错过了一些东西,因为它仍然绕过了代理(即Fiddler) .

在Fiddler我检查了所有常见的嫌疑人:

  • 它捕获来自"All Processes"的流量

  • 在启动时充当系统代理

  • 监控所有连接

  • 它听8888

  • "Use PAC Script"未选中但切换它不会改变任何内容

  • 选项 - >网关 - >使用系统代理被选中

在WinINET设置中输入127.0.0.1:8888作为HTTP的代理(由Fiddler自动完成)

如果Fiddler无法实现,是否还有其他方法可以从TFS客户端转储原始HTTP请求?

1 回答

  • 2

    根据 BypassProxyOnLocalHelper ,您的服务器是本地服务器,它将本地主机定义为不完全限定的主机 . 如果您的主机指定为 tfs03te ,没有域,则它是本地的 .

    只需指定 tfs03te.mycompany.com 即可使您的主机有资格进行代理 .

相关问题