![](/img/trans.png)
[英]Read Only Headers of Http POST request(with huge entity body) in Memory
[英]C# HTTP Post and read only response's headers before fetching body
我正在做這樣的事情:
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帖子中獲取標題?
使用GET或POST請求,服務器將發送所有響應數據,而不會在傳輸中分離標頭和“正文”。 要只獲取標題,請將httpWebRequest.Method設置為“HEAD”並使用httpWebResponse.Headers( http://msdn.microsoft.com/en-us/library/system.net.httpwebresponse.headers.aspx )來收集標題數據。
要添加一些代碼:
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
來獲得它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.