我在 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 中的设置选项,但到目前为止我没有尝试过任何不同。
谢谢,戴夫