【问题标题】:Httpwebreqest works with Fiddler On otherwise TimeoutHttpwebreqest 与 Fiddler 一起使用,否则超时
【发布时间】:2009-06-23 01:31:15
【问题描述】:

我遇到了一个奇怪的错误。我已经设置了一个脚本,在 Fiddler 打开时可以完美运行 - 它使用 httpwebrequest 从网站下载报告,一切正常!

但是只有在 Fiddler 打开时才有效?当提琴手不工作时,我只会收到“请求超时问题”

有谁知道如何解决这个问题并使它与我的 ASP.NET MVC 应用程序一起工作?

谢谢

编辑:感谢您的回复!关于代理 - 我想在 Windows Azure 上测试这个脚本 - 对于如何设置默认代理设置几乎没有困惑?

【问题讨论】:

  • 我听说有些人报告说他们遇到了这样的问题——基本上 Fiddler 相对于一些常见的客户端配置提高了上传性能。通常,除非您可以调整客户端软件(例如更改上传缓冲区大小),否则最好的选择是增加服务器上的超时时间,以便在上传之前留出更长的时间。至于 为什么 Fiddler 在这种情况下会有所帮助,Fiddler 默认会缓冲请求,因此您的应用程序会将完整的请求发送给 Fiddler,Fiddler 会收集所有请求,然后连接到服务器,并将数据发送到服务器尽可能快。

标签: .net asp.net-mvc httpwebrequest fiddler


【解决方案1】:

对于搜索者来说,这是另一种想法。我有一个以机器人方式操作我的网站的应用程序。该应用程序在 .Net 4.0 中使用 HttpWebRequest 和 HttpWebResponse。在两次或 3 次成功的 GET 之后,下一次将持续锁定。另一篇文章建议,由于对同一主机的并行连接数的限制,未正确关闭 HINTERNET 可能会导致应用程序阻止对同一主机的后续 GET。我不知道这是否是幕后发生的事情,但我想我会回去确定我可以关闭的地方。

我关闭了代码中的所有 HttpWebResponse 对象,我的问题就消失了。从这里我不明白为什么 Fiddler 会掩盖这个问题,但它确实做到了。在添加关闭之前,序列中的特定请求将始终超时。关闭响应后,一切都清除了,我可以在不通过 Fiddler 代理的情况下运行。

【讨论】:

  • 是的,这是我的问题。如此简单,它在 2 个请求后一直失败。谢谢教授!
  • 我也可以确认 - 一个简单的 response.Close();解决了我的问题。
  • 我还要感谢这篇文章(4 年后!),因为这也适用于 Powershell3 和 System.Net.WebRequest 对象超出范围时未被清理;所以我必须在超出范围和所有 try/catch 块之前添加对 [System.Net.WebRequest].abort() 的调用。
【解决方案2】:

按照@ProfVonLemongargle 的建议关闭所有 HttpWebRequest 对象解决了我遇到的同样问题。

Fiddler 可能会关闭与服务器的连接,因此当您的应用将其用作代理时,并发连接限制会被屏蔽。有关更多信息,请参阅此线程:HttpWebRequest times out on second call

【讨论】:

    【解决方案3】:

    请注意 Fiddler 充当代理。在 Fiddler 运行时让应用程序正常工作但否则可能表明您的默认代理设置存在问题。打开 Internet 选项(可能通过 IE)并检查您的代理设置。特别要注意您是否通过脚本进行配置。

    我会提到一种非常不可能的可能性,尽管它确实发生在我身上。我的机器上安装了某个防病毒产品。出于某种原因,它认为我的订阅已过期。结果是该软件无法运行,因此无法更新允许访问 Internet 的程序列表。除非 Fiddler 正在运行,否则我在到期后安装的程序将无法运行(因为 Fiddler 是在到期前安装的,所以它在“良好”列表中)。过期后安装的任何其他程序都在“不良”列表中(默认情况下)。

    【讨论】:

    • 感谢您的回复!关于代理 - 我想在 Windows Azure 上测试这个脚本 - 对于如何设置默认代理设置几乎没有困惑?
    • 您已经在普通的 Windows 系统上运行它了吗?在你关心 Azure 之前先这样做。
    【解决方案4】:

    您是否使用 HTTPS 运行?如果是这样,您的代码可能不信任远程站点的证书,并且 Fiddler 可能会将数据传递给您的应用程序。向我们发送错误消息和复制此问题的最少量代码。

    【讨论】:

    • 嗨,戴夫,是的 - 使用 HTTPS 运行。我不在我的电脑上,但代码在哪里(在工作中)有任何想法(如果是这样的话)如何解决这个问题?
    • 看看msdn.microsoft.com/en-us/library/…。您可能需要告诉您的代码接受您正在与之交谈的网站的证书。
    • 如果站点提供了错误的证书,Fiddler 将显示一个模式警告对话框,所以我认为该用户不会遇到这种情况。
    【解决方案5】:

    旧链,但我在我们的代码中发现了同样的问题。这是因为 javascript 中有剩余的 console.log 命令。这导致 javascript 代码被阻止。

    【讨论】:

      【解决方案6】:

      在公司网络上遇到同样的问题,我打开 Fiddler2 来诊断正在发送/接收的内容,问题就消失了!经过进一步研究,我发现 Fiddler 像代理一样通过它隧道传输流量,我的公司网络也使用代理的自动配置脚本(我假设 Fiddler 正在通过我的应用程序不知道的正确系统代理对其进行隧道传输)

      要让我的 VB.net 程序运行,我只需将代理设置添加到请求中:

      Dim proxy = WebRequest.GetSystemWebProxy()
      oRequest.Proxy = proxy
      

      【讨论】:

        猜你喜欢
        • 2011-06-10
        • 1970-01-01
        • 2016-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-27
        • 2014-06-17
        • 1970-01-01
        相关资源
        最近更新 更多