0

VB.Net WinForms アプリで HttpWebRequest を使用して、社内 Web サービスからデータを取得しています。私が使用しているコードは、Fiddler が実行されていないときに実行すると、GET と POST の両方で機能します。Fiddler で GET を実行している場合、GET は機能し、キャプチャされますが、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 呼び出しが実行されると、要求データを含む追加のパケットが送信されます。

Fiddler が実行されていると、postStream.Write が実行されるまで何も送信されません。その時点で、サービスが「100 Continue」で応答する前に、「Expect: 100-continue」ヘッダーを含むヘッダー パケットと要求データ パケットの両方が連続して送信されます。リクエストデータパケットをまだ取得することを期待していないため、これによりWebサービスが混乱していると思います。要求されたデータで応答しません。

Composer を使用して、"Expect: 100-continue" ヘッダーなしでリクエストを手動で作成しました。これが実行されると、同じ 2 つのパケットが生成され、サービスは期待されるデータで応答します。

したがって、Fiddler を使用して POST トラフィックをキャプチャできるようにするには、HttpWebRequest に "Expect: 100-continue" ヘッダーを発行しないように指示できるようにする必要があるようです (見ましたが見つかりませんでした)。これを行う方法) または Fiddler がパケットを別の方法で処理するには、「100 Continue」応答を確認するか、「Expect: 100-continue」ヘッダーを削除するまで、2 番目のパケットを送信しない可能性があります。

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-bodies-by-up-to-350-milliseconds.aspx

于 2013-05-07T18:09:13.317 に答える