【问题标题】:How to capture HTTP communication from TFS client using Fiddler如何使用 Fiddler 从 TFS 客户端捕获 HTTP 通信
【发布时间】:2015-03-04 12:14:57
【问题描述】:

我有一个示例项目,我在其中使用 TFS 客户端库(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 但是没有看到该流量。我该如何改变?

有效的方法:

自己打类似电话

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 中,我检查了所有常见的嫌疑人:

  • 它从“所有进程”捕获流量
  • 在启动时充当系统代理
  • 监控所有连接
  • 在 8888 上监听
  • “使用 PAC 脚本”未选中,但切换它不会改变任何内容
  • 选项 -> 网关 -> 使用系统代理被选中

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

如果 Fiddler 无法实现,还有其他方法可以转储来自 TFS 客户端的原始 HTTP 请求吗?

【问题讨论】:

    标签: tfs fiddler


    【解决方案1】:

    您的服务器本地的,根据BypassProxyOnLocalHelper,它将本地主机定义为不完全合格的主机。如果您的主机被指定为tfs03te,没有域,那么它是本地的。

    只需指定tfs03te.mycompany.com 即可使您的主机符合代理条件。

    【讨论】:

    • 你是对的,这就是问题所在。我改用IP地址,它起作用了。谢谢!
    猜你喜欢
    • 2018-03-27
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多