使用HttpWebRequest到webservice的WinForms应用程序POST通过Fiddler发送时不起作用

时间:2012-07-20 13:34:36

标签: fiddler

我在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 As Stream = webrequestobj.GetRequestStream()”时,会发送包含所有标题信息的数据包,其中包含“Expect:100-continue”标题,但没有请求数据。
  • 执行postStrean.Write调用时,会发送包含请求数据的其他数据包。

在执行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中的设置选项,但到目前为止我没有尝试过任何改变。

谢谢, 戴夫

1 个答案:

答案 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