HttpWebResponse遠程服務器返回錯誤: (500) 內部服務器錯誤 的解決辦法


在工作中用C#開發了一個小程序,不斷訪問去請求一個網站的頁面,在循環過程中有時會報“遠程服務器返回錯誤: (500) 內部服務器錯誤”,有時不會,出現的時機也不太一樣。開始以為是網站的問題,后來網站是可以正常訪問的,那就是自己程序的問題了。

for (int i = refreshAccount.startNum; i <= refreshAccount.endNum; i++) { String data2 = urlstr; loadBranch2Request = (HttpWebRequest)HttpWebRequest.Create(data2); loadBranch2Request.CookieContainer = request2.CookieContainer; loadBranch2Response = (HttpWebResponse)loadBranch2Request.GetResponse(); reader = new StreamReader(loadBranch2Response.GetResponseStream(), Encoding.UTF8); string result3 = reader.ReadToEnd(); loadBranch2Response.Close(); reader.Close(); ………… }

 

從兩個方向找原因,一是HttpWebRequest的正確寫法,二是出現上述問題的原因。在查閱了同類問題的解決方法后,大致判斷為請求報文的問題。

兩個參考博文如下:

C#模擬http 發送post或get請求:https://www.cnblogs.com/aaronguo/p/7063790.html

HttpWebResponse遠程服務器返回錯誤: (500) 內部服務器錯誤 的解決辦法:https://blog.csdn.net/henrycg55/article/details/5330323

 

想當然以為用的是get方法, 不用設置loadBranch2Request.ContentType的值,事實上設置Method和ContentType的值卻解決了上面的問題。

loadBranch2Request.Method = "GET";

loadBranch2Request.ContentType = "text/html;charset=UTF-8";

for (int i = refreshAccount.startNum; i <= refreshAccount.endNum; i++)
{
  String data2 = urlstr;
  loadBranch2Request = (HttpWebRequest)HttpWebRequest.Create(data2);
  loadBranch2Request.CookieContainer = request2.CookieContainer;
  loadBranch2Request.Method = "GET";
  loadBranch2Request.ContentType = "text/html;charset=UTF-8";
  loadBranch2Response = (HttpWebResponse)loadBranch2Request.GetResponse();
  reader = new StreamReader(loadBranch2Response.GetResponseStream(), Encoding.UTF8);

  string result3 = reader.ReadToEnd();
  loadBranch2Response.Close();
  reader.Close();
   …………
}

 

如果想獲取錯誤頁面的源碼,可以用如下方法

參考:https://www.cnblogs.com/cresuccess/archive/2009/12/09/1619977.html

用下面的代碼就不論錯誤發生與否,都可以獲得服務器段頁面的源代碼。

 HttpWebResponse res;
try
{
res = (HttpWebResponse)req.GetResponse();
}
catch (WebException ex)
{
res = (HttpWebResponse)ex.Response;
}
StreamReader sr = new StreamReader(res.GetResponseStream(), strEncode);
strHtml = sr.ReadToEnd();
當異常發生事后,WebException 中不僅有 StatusCode 標志着 HTTP 的錯誤代碼,而且它的 Response 屬性還包含由服務器發送的 WebResponse,來指示遇到的實際 HTTP 錯誤。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM