2012-04-12 34 views
3

我在做这样的事情之前,只读响应的头部:C#HTTP POST和获取身体

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

你可以使用“HEAD”方法来获取头部。虽然这只是在没有触发像POST这样的逻辑的情况下获得头部。 – 2012-04-12 09:18:39

+1

我其实需要POST。在阅读html内容之前,我需要发布数据并验证它是否成功。基本上我需要验证ResponseUri。我想节省一些带宽。 – 2012-04-12 09:20:58

回答

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获得。