【发布时间】:2014-11-03 07:24:15
【问题描述】:
当我输入此 URI 以在我正在运行的 Web API 应用程序上调用 REST 方法时:
http://SHANNON2:21608/api/inventory/sendXML/duckbill/platypus/someFileName // using Hostname of local machine
--或者这个:
http://192.168.125.50:21608/api/inventory/sendXML/duckbill/platypus/someFileName // using IP Address of local machine
...在 Postman 中(使用 HttpPost,并附加一个 xml 文件)并运行它,在 Fiddler 2 中检查它时,我在 Fiddler 的 Inspectors.WebView 窗格中看到了这个错误:
Bad Request - Invalid Hostname
--------------------------------------------------------------------------------
HTTP Error 400. The request hostname is invalid.
注意:即使我确实在服务器上的相应控制器 REST 方法中命中了断点,我也会收到该错误。
为了进一步检查到底发生了什么(正在发送什么 HTTP),我运行 Wireshark 并仅看到我的 IP 地址的目的地:
...这个以我的 IP 地址为来源:
为什么没有 HTTP 协议条目? HTTP 显然正在发送,因为我遇到了我在服务器控制器方法的第一行设置的断点:
[HttpPost]
[Route("api/inventory/sendXML/{userId}/{pwd}/{filename}")]
public async Task SendInventoryXML(String userId, String pwd, String fileName)
{
Task task = Request.Content.ReadAsStreamAsync().ContinueWith(t =>
{
var stream = t.Result;
using (FileStream fileStream = File.Create(String.Format(@"C:\HDP\{0}.xml", fileName), (int)stream.Length))
{
byte[] bytesInStream = new byte[stream.Length];
stream.Read(bytesInStream, 0, (int)bytesInStream.Length);
fileStream.Write(bytesInStream, 0, bytesInStream.Length);
}
});
}
那么,为什么 Wireshark 对向我显示发送的 HTTP 如此保密?它是否对这种内部沟通视而不见,如果是,我如何“释放它”向我展示这一点?
更新
啊哈/瞧! Postman、RawCap (http://www.netresec.com/?page=RawCap) 和 Wireshark 的组合似乎有效。我立即在命令提示符下运行了新发现的 RawCap,并使用了这种措辞:
RawCap.exe 192.168.125.50 captured.pcap
...然后从 Postman 调用 REST 方法,并在 Wireshark 中打开 RawCap 创建的结果文件(在我的例子中为 captured.pcap),它向我显示了一些 HTTP 流量:
有关 HTTP 调用的更多详细信息,请参见此处:
我不知道如何优雅地“关闭” RawCap。
更新 2
RawCap/Wireshark 告诉我这是一个错误请求(我已经知道这是响应):
...但我没有看到任何线索为什么它被认为是一个错误的请求
更新 3
当我尝试使用各种形式的“本地”(主机名、IP 地址、“本地主机”)从 Fiddler Composer 调用我的 REST 方法时,我从未到达服务器中的断点;在此之前我收到错误消息(404 用于 locohost,400 用于所有其他):
【问题讨论】:
-
我觉得不太一样;就我而言,我看到了本地机器的流量(使用 IP 地址),但我只是没有看到一些应该存在/可见的 HTTP 流量。
-
您确定请求和响应是通过 TCP 上的 HTTP,而不是 TCP 上的 SSL/TLS 上的 HTTP 吗? Wireshark 流量显示 TLSv1 流量,您会看到它是否是 HTTP over TLS over TCP。我认为 Fiddler 可能会在 被 SSL/TLS 加密之前拦截流量。
-
错误响应的内容长度为 334 字节...消息正文包含什么?您有可以比较的成功调用的痕迹吗?
-
...说到内容长度,为什么您的 POST 显示内容长度为 0?
标签: http asp.net-web-api fiddler wireshark postman