首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取正文之前的C# HTTP Post和read only响应头

问获取正文之前的C# HTTP Post和read only响应头
EN

Stack Overflow用户
提问于 2012-04-12 17:16:22
回答 2查看 3.5K关注 0票数 3

我正在做这样的事情:

代码语言:javascript
复制
 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 post中获取标题?

EN

回答 2

Stack Overflow用户

发布于 2012-04-12 17:28:40

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

票数 2
EN

Stack Overflow用户

发布于 2015-03-28 04:16:05

添加一些代码:

代码语言:javascript
复制
 url = "some web string"
 uri = new UriBuilder(url).Uri;
 request = WebRequest.Create(this.uri);
 request.Method = "HEAD";
 response = request.GetResponse();
 response.Close();

现在我们只得到了头文件。干净利落!访问方式如下:

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

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

编辑: Execpt,显然是内容类型。您可以使用response.ContentType来实现这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10120713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档