1. 程式人生 > >HttpWebResponse遠程服務器返回錯誤: (500) 內部服務器錯誤 的解決辦法

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

text hive dto ext style blog sha str 錯誤頁

在工作中用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 錯誤。

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