当我输入此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.
注意:即使我执行命中服务器上相应的Controller 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优雅。
RawCap / Wireshark告诉我这是一个错误的请求(我已经知道是响应):
...但是我没有看到任何关于为什么被认为是错误请求的线索
当我尝试使用各种形式的" local"从Fiddler Composer调用我的REST方法时(主机名,IP地址," locohost"),我从未到达服务器中的断点;在此之前我得到了错误的消息(对于locohost为404,对于所有其他用户为400):
答案 0 :(得分:2)
通常,Invalid Hostname
表示HTTP请求的Host
标头包含未绑定到Web服务器上任何站点的值。例如,您使用的是IP地址作为主机,但如果您的服务器仅配置为接受计算机名称(例如mybox
),那么您将看到来自服务器的HTTP / 400要求您提供适当的主机名。