3

我正在做这样的事情:

 var httpWebRequest = WebRequest.Create(context.Url) as HttpWebRequest;
 httpWebRequest.Method = "POST"
 ... (set all the stuff)
 ... (get request stream and post data)

 //Get response
 var httpWebResponse = httpWebRequest.GetResponse() as HttpWebResponse;

 ... (Inspect Headers)

 //Get response stream and read body
 var responseStream = httpWebRequest.GetResponseStream();

根据我的谦虚期望,我认为调用 GetResponse() 只会获取标题,而当我开始从响应流中读取时,会实际下载正文。实际发生的是,当我调用 GetResponseStream() 并读取它时,数​​据已经可用。响应是普通的 HTML 页面。我相信分块数据效果很好。

所以我的问题是,那里到底发生了什么以及如何在获取正文内容之前仅从 http 帖子中获取标头?

4

2 回答 2

2

使用 GET 或 POST 请求,服务器将发送所有响应数据,而不会在传输中分离标头和“正文”。要仅获取标头,请将 httpWebRequest.Method 设置为“HEAD”并使用 httpWebResponse.Headers ( http://msdn.microsoft.com/en-us/library/system.net.httpwebresponse.headers.aspx ) 收集标头数据。

于 2012-04-12T09:28:40.270 回答
0

添加一些代码:

 url = "some web string"
 uri = new UriBuilder(url).Uri;
 request = WebRequest.Create(this.uri);
 request.Method = "HEAD";
 response = request.GetResponse();
 response.Close();

现在我们只得到了标题。整洁的!访问如:

for (int i = 0; i < response.Headers.Count; ++i) {
    Console.WriteLine("\n Header Name:{0}, Value :{1}", response.Headers.Keys[i], response.Headers[i]); 
}

不幸的是,似乎没有办法直接查找特定的标头名称。所以你必须使用一些检查所有键的包装函数。

编辑:显然,执行内容类型。你可以用response.ContentType.

于 2015-03-27T20:16:05.367 回答