2012-07-27 69 views
0

我有以下情況不加載內容。我打電話給一些web api登錄到某個服務器。調用看起來像這樣: webhost/[email protected] &密碼=阿林 回報始終是一個XML這樣的:的HttpWebRequest時401 happend但瀏覽器

<response> 
<error>invalid user</error> 
</response> 

<response> 
<token>XXXXXXX</token> 
</response> 

所以,如果我調用此API與錯誤的憑據,該頁面返回了401的HTTP狀態,然後在該行

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

它引發錯誤,它JUM ps在catch塊中。 (當然)的事情是,下一行

stream = response.GetResponseStream(); 

永遠不會發生,所以我將永遠不會讀取返回的XML,包括它裏面的錯誤消息。不過,如果我只是貼上瀏覽器的鏈接,頁面和TEH XML被加載

爲什麼在瀏覽器加載XML和我的迴應組件不會。順便說一下,我在C#這樣

感謝

Stream stream = null; 
try 
{ 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(finalURL); 
    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
    stream = response.GetResponseStream(); 
} 
catch(Exception ex) 
{ 
    string x = ex.Message; 
} 
+0

可能的重複[獲取StatusCode 401的響應內容](http://stackoverflow.com/questions/2037687/get-content-of-response-with-statuscode-401) – lunaryorn 2012-07-27 20:04:34

回答

3

那麼你不試圖看響應。

如果趕上一個特定異常(如你應該 - 捕Exception在大多數情況下是一個壞主意),你可以在響應數據得到:

catch (WebException e) 
{ 
    WebResponse response = e.Response; 
    // TODO: Check whether the status code is one you can handle 
    // Get the data from here... 
} 

注意,你應該有一個using聲明您的HttpWebResponse也處於非故障狀態,否則您最終會打開資源。

+0

正確,謝謝 – 2012-07-27 10:23:05

0

試試這個:

if (ex is WebException) 
{ 
    var webException = ex as WebException; 
    var response = (HttpWebResponse)webException.Response; 

    switch (response.StatusCode) 
    { 
      case HttpStatusCode.Unauthorized: 

       var responseStream = response.GetResponseStream(); 
       break; 

     } 
} 
0

找出你的瀏覽器的用戶代理字符串,然後設置您的WebRequest相匹配的用戶代理字符串。許多網站基於UA提供不同的內容/標記/樣式/腳本。

HttpWebRequest,則可以通過用戶代理屬性設置的UA。

看看這會有所幫助。

相關問題