我正在做这样的事情:
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帖子中获取标题?
答案 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
获得该作品。