我在VB.Net WinForms应用程序中使用HttpWebRequest从内部Web服务获取数据。我正在使用的代码在Fiddler未运行时运行时可用于GET和POST。如果我有Fiddler运行GETs工作并被捕获但POST没有完成。在这种情况下,Fiddler捕获初始请求但从未获得响应,应用程序也没有得到响应。
代码为POST设置HttpWebRequest设置适当的属性,对要发送到JSON的数据进行编码然后执行此操作。
Using postStream As Stream = webrequestobj.GetRequestStream()
postStream.Write(WebServiceByteData, 0, WebServiceByteData.Length)
End Using
我使用WireShark捕获生成的网络数据包,并注意到在没有通过Fiddler的情况下发送POST时会发生以下情况。
在执行postStream.Write之前,Fiddler运行任何东西都没有被放在线上。此时,具有“Expect:100-continue”标头的头部分组和请求数据分组在服务已响应“100 Continue”之前被发送回。我猜这会混淆webservice,因为它不希望得到请求数据包。它不响应所请求的数据。
我使用Composer手动创建没有“Expect:100-continue”标头的请求。执行此操作时,将生成相同的两个数据包,并且服务将使用预期数据进行响应。
所以,为了能够使用Fiddler来捕获POST流量,看起来我需要能够告诉HttpWebRequest不要发出“Expect:100-continue”标题(我已经看了但是还没有'找到了这样做的方法)或者Fiddler以不同的方式处理数据包,可能不会发送第二个数据包,直到它看到“100 Continue”响应或者删除“Expect:100-continue”标题。
我可能错过了Fiddler中的设置选项,但到目前为止我没有尝试过任何改变。
谢谢, 戴夫
答案 0 :(得分:0)
老问题,但简短的回答是缺少100 /继续响应应该不重要。
要详细了解期望:继续,包括如何删除此标题,请参阅http://blogs.msdn.com/b/fiddler/archive/2011/11/05/http-expect-continue-delays-transmitting-post-bodies-by-up-to-350-milliseconds.aspx