- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我知道有很多关于此的问题/答案、博客,而不是谈论 Telerik 的常见问题解答。我仍然找不到以清晰纯粹的方式诊断和解决这个问题:
上下文:
我有一个 Web API 应用程序和一个(单元测试)客户端,它使用 HttpClient 向 API 发送请求。 Web API 应用程序监听 http://localhost:8631/有时我使用 Fiddler 来查看发生了什么。
问题:
我的 HttpClient 和 Web API 之间的流量没有被 Fiddler 捕获。启动 Fiddler 后流量仍然正常,但未在 Fiddler 中显示。
到目前为止的诊断:
结论:至少我的情况是:这与 HttpClient 是否明确配置为使用 Fiddler 作为代理无关。它与 HttpClient 和/或 Fiddler 的本地主机行为有关。
再次发出:
有人会问:问题解决了,那问题是什么?嗯……
Q1: 这仍然是一个痛苦的问题,因为 url 在某处编码或配置(我的意思是 http://localhost:8631/ 或 http://localhost .fiddler:8631 所以 fiddler 的每次启动和停止都必须更新它。更多:将源代码 checkin 源代码管理,并由队友在另一台机器上 checkout 可能会导致问题。所以:是否有任何不那么痛苦的解决方法这个?
在团队中工作和使用源代码控制时,硬编码我的机器名称(这也可以工作)会导致同样的痛苦和问题
Q2: 为什么会出现这种不一致的行为:纯 http://localhost:8631/适用于任何浏览器,但不适用于 HttpClient。
我认为回答问题 2 可以让我们更接近更有用的解决方法。
代码展示
// Using the following url w o r k s regardless of any proxy setting
// ...but it is a pain to hardcode or configure this and change depending on Fiddler is running or not
//private const string ApiUrl = "http://localhost.fiddler:8631/";
// This is not working regardless any proxy setting. Trafic bypasses Fiddler
private const string ApiUrl = "http://localhost:8631/";
protected HttpClient GetClient()
{
var httpClientHandler = new HttpClientHandler
{
// Does not work
//Proxy = new WebProxy("http://localhost:8888", false),
// Does not work
Proxy = WebRequest.DefaultWebProxy,
UseProxy = true
};
var client = new HttpClient(httpClientHandler)
{
BaseAddress = new Uri(ApiUrl)
};
// ...
最佳答案
问题是 WebProxy
类的 Microsoft 实现对环回 url 进行静态检查(基于名称列表,如“localhost”),并将绕过任何标识为环回的 uris 的代理.即使是 BypassProxyOnLocal
设置也无关紧要。此设置仅在您使用本地机器名称或本地网络中的其他机器名称时有效。主机 localhost 或 ip 地址 127.0.0.1 始终被识别为环回,将导致绕过代理。
.net 框架代码的相关部分在 WebProxy.IsBypassedManual
中:
if (host.IsLoopback) {
return true; // bypass localhost from using a proxy.
}
编写您自己的 WebProxy 类的后代并覆盖 GetProxy
和 IsBypassed
方法以使用代理返回 uri,即使对于环回 url 也是如此。然后将该类的一个实例分配给您用来创建 HttpClient
的 HttpClientHandler
。
似乎不起作用,因为 .net 代码期望与实现 IAutoWebProxy 的对象一起工作,但 IAutoWebProxy 被声明为内部的,不能在我们自己的代码中使用。
我看到的最简单的解决方案是在运行时使用 ApiUrl 中的本地机器名称替换“localhost”的功能。无论 Fiddler 是否正在运行,本地机器名称都将起作用。
关于c# - 如何将 Fiddler 与 HttpClient 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36277311/
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 8年前关闭。 Improve this q
我想知道是否可以只在某些进程上使用 Fiddler2,而不是在所有使用系统代理设置的应用程序上。我知道 Fiddler2 中有一个过滤器选项,但据我所知,它只隐藏信息并且无论如何都会捕获流量。 最佳答
我有以下要求: 我需要从命令行启动 Fiddler。它将立即开始捕获我的流量。一段时间后,我想停止捕获流量,但不想关闭 Fiddler。 实现这一目标的最佳方法是什么?我已经探索了 Fiddler 的
我有以下要求: 我需要从命令行启动 Fiddler。它将立即开始捕获我的流量。一段时间后,我想停止捕获流量,但不想关闭 Fiddler。 实现这一目标的最佳方法是什么?我已经探索了 Fiddler 的
在 fiddler 中,如何在请求到达主机之前终止请求。例如,我发送了一个请求,我想在该请求中放置一个断点,这样我就无法接收到响应。基本上,我想在将响应返回给原始调用者之前检查响应,以及如果连接丢失或
Fiddler 指定了两个选项将其用作反向代理。 选项1: Fiddler can be configured so that any traffic sent to http://127.0.0.1
当我打开 fiddler 时,可以捕获来自浏览器的HTTP流量。 我使用.net HttpWebRequest编写了一个程序,也可以捕获流量。 同样使用python urllib2,fiddler捕获
当您使用 URL ipv4.fiddler 时,我很好奇 fiddler 是如何捕获流量的。 ipv4 是解析本地的特殊域,fiddler 只是向 http.sys 注册以代理调用吗? 任何见解都会很
fiddler response 当我点击解码时,我得到了解码后的消息,但我在哪里可以找到编码类型,以便我可以手动解码消息或获取更多信息? 最佳答案 我正在使用 fiddler 版本:v5.0.202
是否可以指示 Fiddler 仅显示定向到特定主机名的流量?也就是说Fiddler流量可以针对Host进行过滤吗? 最佳答案 请参阅此屏幕截图。位于屏幕的右上方 关于fiddler - 过滤 Fidd
我正在尝试通过 fiddler 路由我的soapUI Web 服务请求,但它似乎不起作用。我尝试过类似的网址 http://localhost./myservice/myservice.asmx ht
我正在使用 Fiddler,想要模拟不同的网络速度 是否有任何已发布的数据可供我使用延迟值来模拟不同的速度? 以下是 Fiddler 模拟 56kb 调制解调器速度的默认代码。 if (m_Simul
我面临的问题几乎类似于以下线程: Unable to control the network bandwidth using fiddler in spite of custom rules? 我想按
在 this question的评论,EricLaw (Fiddler 的作者)写道: Fiddler has lots of interesting features, but not all of
我在一台服务器向另一台服务器发送数据时遇到问题,所以我想:让我们调试一下。我可以设置代理,那么为什么不使用 Fiddler?因此,我通过将主机设置为我计算机的 IP (192.168.2.111) 并
如何在 Fiddler 中使用正则表达式重定向到 URL? If URL mathes regex:(?insx)^http://www.(.*)$ respond to http://proxy.e
Fiddler中这个图标是什么意思: 它未在 help 中列出. 最佳答案 此图标用于回复 Content-Type=Content-Type: text/html; 关于fiddler - 蓝色<>
fiddler“Composer”选项卡的“options”子选项卡让您可以将 Composer 撕成一个 float 窗口。问题是怎么放回去?我失去了 float 窗口,现在 fiddler 的 C
我已经按照以下链接使用 ServiceStack(客户示例)构建了一个服务:https://docs.google.com/present/view?id=dg3mcfb_213gsvvmmfk 当我
通常,我们通过 Fiddler 捕获了太多的请求,但是使用 POST 方法的请求最终是我们想要的。 有什么方法可以使用 提取/过滤/这些请求发布 方法,换句话说,显示 发布 仅请求。 我已经阅读了 F
我是一名优秀的程序员,十分优秀!