C#HTTP在获取正文之前发布并只读取响应的标题

时间:2012-04-12 09:16:22

标签: c# .net http post http-headers

我正在做这样的事情:

 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帖子中获取标题?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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获得该作品。