0

我在 VB.Net WinForms 应用程序中使用 HttpWebRequest 从内部网络服务获取数据。在 Fiddler 未运行时运行时,我使用的代码适用于 GET 和 POST。如果我让 Fiddler 运行 GET 工作并被捕获但 POST 未完成。在这种情况下,Fiddler 捕获了初始请求,但从未得到响应,应用程序也没有得到响应。

该代码为 POST 设置适当的属性构建 HttpWebRequest,将要发送的数据编码为 JSON,然后执行此操作。

Using postStream As Stream = webrequestobj.GetRequestStream()
    postStream.Write(WebServiceByteData, 0, WebServiceByteData.Length)
End Using

我使用 WireShark 捕获生成的网络数据包,并注意到当发送 POST 而不通过 Fiddler 时,会发生以下情况。

  • 当执行“postStream As Stream = webrequestobj.GetRequestStream()”时,会发送一个包含所有标头信息的数据包,其中包括“Expect: 100-continue”标头,但没有请求数据。
  • 执行 postStrean.Write 调用时,会发送一个包含请求数据的附加数据包。

在 Fiddler 运行的情况下,直到 postStream.Write 执行后,才会在网络上放置任何东西。此时,带有“Expect: 100-continue”标头的标头数据包和请求数据包在服务响应“100 Continue”之前被背靠背发送。我猜这会使 web 服务感到困惑,因为它不希望得到请求数据包。它不响应请求的数据。

我使用 Composer 手动创建没有“Expect: 100-continue”标头的请求。执行此操作时,会生成相同的两个数据包,并且服务会使用预期的数据进行响应。

因此,为了能够使用 Fiddler 捕获 POST 流量,看起来我需要能够告诉 HttpWebRequest 不要发出“Expect:100-continue”标头(我已经看过但没有找到方法)或 Fiddler 以不同的方式处理数据包,可能在看到“100 Continue”响应或剥离“Expect: 100-continue”标头之前不发送第二个数据包。

我可能错过了 Fiddler 中的设置选项,但到目前为止我没有尝试过任何不同。

谢谢,戴夫

4

1 回答 1

0

老问题,但简短的回答是,缺少 100/Continue 响应根本不重要。

要了解有关 Expect: Continue 的更多信息,包括如何根据需要删除此标头,请参阅http://blogs.msdn.com/b/fiddler/archive/2011/11/05/http-expect-continue-delays-transmitting -post-body-by-up-to-350-milliseconds.aspx

于 2013-05-07T18:09:13.317 回答