我正嘗試使用C#4.0中的WebRequest類下載頁面。出於某種原因,此頁面將正確返回所有內容,但帶有HTTP 500內部錯誤代碼。C#HttpWebRequest忽略HTTP 500錯誤
Request.EndGetResponse(ar);
當頁面返回HTTP 500或404時,此方法拋出WebException。我怎麼能忽略這個?我知道它返回500,但我仍然想讀取頁面/響應的內容。
我正嘗試使用C#4.0中的WebRequest類下載頁面。出於某種原因,此頁面將正確返回所有內容,但帶有HTTP 500內部錯誤代碼。C#HttpWebRequest忽略HTTP 500錯誤
Request.EndGetResponse(ar);
當頁面返回HTTP 500或404時,此方法拋出WebException。我怎麼能忽略這個?我知道它返回500,但我仍然想讀取頁面/響應的內容。
使用try
/catch
塊,讓您的計劃,以確保即使拋出異常運行:
try
{
Request.EndGetResponse(ar);
}
catch (WebException wex)
{
// Handle your exception here (or don't, to effectively "ignore" it)
}
// Program will continue to execute
try {
resp = rs.Request.EndGetResponse(ar);
}
catch (WebException ex)
{
resp = ex.Response as HttpWebResponse;
}
您可以在try/catch塊捕獲異常並做額外的處理通過查看WebExeption類公開的響應對象,發現http 404或500錯誤。
try
{
response = (HttpWebResponse)Request.EndGetResponse(ar);
}
catch (System.Net.WebException ex)
{
response = (HttpWebResponse)ex.Response;
switch (response.StatusCode)
{
case HttpStatusCode.NotFound: // 404
break;
case HttpStatusCode.InternalServerError: // 500
break;
default:
throw;
}
}
問題是由於未將瀏覽器詳細信息發送到請求網站。 您需要向您要求數據的網站標識自己。
簡單的一個用戶代理添加到您的代碼
request.UserAgent = 「Mozilla的/ 5.0(Windows NT的6.1; WOW64; RV:2.0)的Gecko/20100101火狐/ 4.0」;
最終代碼應該是這個樣子:
HttpWebRequest Request = (HttpWebRequest)WebRequest.Create(http://WEBURL);
Request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0) Gecko/20100101 Firefox/4.0";
try
{
response = (HttpWebResponse)Request.EndGetResponse(ar);
}
catch (System.Net.WebException ex)
{
response = (HttpWebResponse)ex.Response;
switch (response.StatusCode)
{
case HttpStatusCode.NotFound: // 404
break;
case HttpStatusCode.InternalServerError: // 500
break;
default:
throw;
}
}
請找到參考/證明上面的代碼中提到: https://msdn.microsoft.com/en-us/library/system.net.webclient(v=vs.110).aspx
這是在鏈接
提到「」默認情況下,WebClient實例不會發送可選的HTTP標頭。如果您的請求需要選項nal標題,您必須將標題添加到Headers集合。例如,要在響應中保留查詢,您必須添加一個用戶代理標題。此外,如果用戶代理標題丟失,服務器可能會返回500(內部服務器錯誤)。「