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 のセットアップ オプションを見逃した可能性がありますが、これまでに試したことは何もありません。
ありがとう、デイブ