簡體   English   中英

C#HTTP在獲取正文之前發布並只讀取響應的標題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM