tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von Turri
  • 1 Beitrag von Turri
ERLEDIGT
JA
ANTWORTEN
6
ZUGRIFFE
1826
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Ronox Ronox ist offline Mitglied Bronze
    Registriert seit
    Nov 2006
    Beiträge
    26
    Hallo,

    ich will auf eine Homepage zugreifen die Leider immer ein
    "Internal Server Error - 500" per Response Header zurück liefert in Firefox.

    Natürlich kommt der Fehler auch bei meinem Programm bei der Code Zeile:

    Code :
    1
    
     response = (HttpWebResponse)request1.GetResponse();

    "Der Remoteserver hat einen Fehler zurückgegeben: (500) Interner Serverfehler."

    Wenn ich das ganze per try & catch abfange, kann der StreamReader natürlich keinen passenden Stream auffinden.
    Hat Irgendjemand eine Idee? Wie ich das jetzt wie in Firefox Ignorieren kann und trotzdem an den Inhalt komme?

    MFG Ronox
     

  2. #2
    Avatar von Turri
    Turri Turri ist offline Mitglied Brokat
    Registriert seit
    Jun 2005
    Beiträge
    354
    Hallo,

    bist du sicher, dass der Firefox fehlerfafte Antworten ignoriert?
    Ich vermute eher, der Firefox macht was richtig, was du aber im Code falsch machst.

    Wie stellst du denn deine Anfrage, um an deine Seite zu kommen?
     
    MfG Turri

    PS: Wenn ich helfen konnte, würde ich mich über ein Danke oder eine positive Bewertung freuen. :-)

  3. #3
    Ronox Ronox ist offline Mitglied Bronze
    Registriert seit
    Nov 2006
    Beiträge
    26
    Ok hier mal der komplette Code:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    
            private CookieContainer cookieContainer = new CookieContainer();
     
            CookieCollection cookiecoll = new CookieCollection();
            
            HttpWebRequest request;
            HttpWebResponse response;
            StreamReader sr;
     
    [...]
     
           public string plogin(string user, string pw, string server, string url)
            {
                HttpWebRequest request0 = (HttpWebRequest)HttpWebRequest.Create(server);
                request0.Method = "GET";
                request0.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13";
                request0.CookieContainer = new CookieContainer();
                response = (HttpWebResponse)request0.GetResponse();
                cookiecoll = response.Cookies;
                response.Close();
     
                HttpWebRequest request1 = (HttpWebRequest)HttpWebRequest.Create(server + url);
                request1.Method = "POST";
                request1.Host = server.Replace("http://","").Replace("/","");
                request1.ContentType = "application/x-www-form-urlencoded";
                request1.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13";
                request1.Referer = server;
                request1.CookieContainer = new CookieContainer();
                request1.CookieContainer.Add(cookiecoll);
                request1.ServicePoint.Expect100Continue = false;
                request1.Timeout = 30000;
                
                ASCIIEncoding encoding = new ASCIIEncoding();
                byte[] loginDataBytes = encoding.GetBytes("server="+ server + url +"&user="+user+"&password="+pw+"&x=0&y=0");
                
                request1.ContentLength = loginDataBytes.Length;
     
                Stream stream = request1.GetRequestStream();
                stream.Write(loginDataBytes, 0, loginDataBytes.Length);
                stream.Close();
     
                // Hier tritt der Fehler auf
                response = (HttpWebResponse)request1.GetResponse();
     
                sr = new StreamReader(response.GetResponseStream());
                string html = sr.ReadToEnd();
                sr.Close();
     
                response.Close();
     
                string tmp = "";
                foreach (Cookie cook in cookiecoll)
                {
                    tmp = cook.ToString();
                    MessageBox.Show("1. Step: " + cook.ToString());
                }
     
    return "\"Cookie:\" "+tmp;
    }

    Das ist der Response Header von Firefox:
    Status=Internal Server Error - 500
    Transfer-Encoding=chunked
    Expires=Thu, 19 Nov 1981 08:52:00 GMT
    Cache-Control=no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Pragma=no-cache
    Content-Type=text/html
    Date=Tue, 01 Mar 2011 17:20:14 GMT
    Server=RMSWebServer/1.0
    Und er zeigt mir trotzdem den Content an in Firefox.
     

  4. #4
    Avatar von Turri
    Turri Turri ist offline Mitglied Brokat
    Registriert seit
    Jun 2005
    Beiträge
    354
    Hallo,

    ich sehe einen Unterschied (wie ich sonst HttpRequests verschicke) bei der Cookiebehandlung.
    Ich arbeite ohne CookieCollection.
    Code csharp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    ...
    cookies = new CookieContainer();
     
    public string sendGetRequest(string url, string referer)
            {
                HttpWebRequest HttpReq = (HttpWebRequest)WebRequest.Create(url);
                HttpReq.Referer = referer;
                HttpReq.CookieContainer = cookies;
     
                HttpWebResponse response;
                try
                {
                    response = (HttpWebResponse)HttpReq.GetResponse();                
                }
                catch (WebException ex)
                {
                    ....              
                }
                StreamReader reader = new StreamReader(response.GetResponseStream());
     
                return reader.ReadToEnd();
            }

    Die "cookies" sind dann gefüllt, nach der GetResponse() von GET Request.
    Die cookies werden nur in der Instanz der klasse gepseichert und beim nächsten Request einfach wieder mit angegeben. Responsecookies werden nicht berücksichtigt. Die waren bei mir immer leer... komischerweise...

    und hier dann ein Post Request:
    Code csharp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    
    public string sendPostRequest(string url, string postData, string referer)
            {
                HttpWebRequest HttpReq = (HttpWebRequest)WebRequest.Create(url);
     
                byte[] data = Encoding.UTF8.GetBytes(postData);
     
                HttpReq.Method = "POST";
                HttpReq.Referer = referer;
                HttpReq.CookieContainer = cookies;
                HttpReq.ContentType = "application/x-www-form-urlencoded";
                HttpReq.ContentLength = data.Length;
                HttpReq.ServicePoint.Expect100Continue = false;
     
                HttpWebResponse response;
     
                try
                {
                    Stream newStream = HttpReq.GetRequestStream();
                    newStream.Write(data, 0, data.Length);
                    newStream.Close();
                    response = (HttpWebResponse)HttpReq.GetResponse();
                }
                catch (WebException ex)
                {
                    ...
                }
                StreamReader reader = new StreamReader(response.GetResponseStream());
     
                return reader.ReadToEnd();
            }

    Funktioniert bei mir sehr gut.

    Du kannst notfalls ja mit dem Firefox Plugin "Live Http Headers" schauen, was der Firefox über die Leitung schickt. Vielleicht gibts doch einen Unterschied zu deiner Anfrage.
    Geändert von Turri (02.03.11 um 08:43 Uhr)
    Ronox bedankt sich. 
    MfG Turri

    PS: Wenn ich helfen konnte, würde ich mich über ein Danke oder eine positive Bewertung freuen. :-)

  5. #5
    Ronox Ronox ist offline Mitglied Bronze
    Registriert seit
    Nov 2006
    Beiträge
    26
    Hi,

    also ich habs natürlich mit deiner Variante probiert und mir die WebException ausgeben lassen:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    
     
    System.Net.WebException: Der Remoteserver hat einen Fehler zurückgegeben: (500) Interner Serverfehler.
       bei System.Net.HttpWebRequest.GetResponse()
       bei Monstergame_Bot.http.sendGetRequest(String url, String referer) in C:\Users\ronox\AppData\Local\Temporary Projects\Monstergame Bot\http.cs:Zeile 23.
     
    System.Net.WebException: Der Remoteserver hat einen Fehler zurückgegeben: (500) Interner Serverfehler.
       bei System.Net.HttpWebRequest.GetResponse()
       bei Monstergame_Bot.http.sendPostRequest(String url, String postData, String referer) in C:\Users\ronox\AppData\Local\Temporary Projects\Monstergame Bot\http.cs:Zeile 53.

    Den Response Header habe Ich von einem anderen Addon, aber habe das ganze nochmal durch Http Live Headers gejagt und es kommt folgendes raus:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
     
    POST /index.php?ac=login HTTP/1.1
    Host: <host>
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
    Accept-Encoding: gzip,deflate
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 115
    Connection: keep-alive
    Referer: <referer>
    Cookie: SSID=02f5605e94d19e9d4d85cef8b0f37e89f642d9d1
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 112
    server=<post>
    HTTP/1.1 500 Internal Server Error
    Transfer-Encoding: chunked
    Expires: Thu, 19 Nov 1981 08:52:00 GMT
    Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Pragma: no-cache
    Content-Type: text/html
    Date: Wed, 02 Mar 2011 14:07:02 GMT
    Server: RMSWebServer/1.0
     

  6. #6
    Avatar von Turri
    Turri Turri ist offline Mitglied Brokat
    Registriert seit
    Jun 2005
    Beiträge
    354
    Hallo,

    das find ich ja echt interessant.

    Ich hab gerade keine Seite da, wo ich einen Fehler 500 bekomme.
    Aber du kannst ja mal versuchen, die Response in der Exception ausgeben zu lassen.
    Vielleicht steht ja der SeitenCode drin.

    Code csharp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    HttpWebResponse response;
                try
                {
                     // hier krachts ja...
                    response = (HttpWebResponse)HttpReq.GetResponse();
     
                }
               catch (WebException ex)
                {
                    // und hier gehts weiter
                    response = (HttpWebResponse)ex.Response;
                    // Console.WriteLine(response.StatusCode);
                    // Console.WriteLine(response.StatusDescription);
                    if (response.StatusCode == HttpStatusCode.InternalServerError)
                    {
                        StreamReader reader = new StreamReader(response.GetResponseStream());
                        Console.Write(reader.ReadToEnd());
                    }
                }

    Ob das funktioniert, weiß ich aber nicht.
    Ronox bedankt sich. 
    MfG Turri

    PS: Wenn ich helfen konnte, würde ich mich über ein Danke oder eine positive Bewertung freuen. :-)

  7. #7
    Ronox Ronox ist offline Mitglied Bronze
    Registriert seit
    Nov 2006
    Beiträge
    26
    Hey du bist gut

    Ich danke dir für deine Hilfe es hat Funktioniert, etwas eigenartig, find ich.
    Aber es klappt