mikrocontroller.net

Forum: PC-Programmierung Error Code 401 through C# API


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Torben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich hab ein merkwürdigen Fehler und weiß nicht woran es liegen 
kann, weil es nicht mein Spezialgebiet ist.

Beschreibung:

Wir haben einen Webserver im Internet, welches eine WebApplikation(html, 
java, php) im Explorer darstellt und im Hintergrund werkelt eine 
Datenbank auf dem Internetserver. Die Seite ist gestützt mit einem 
Usernamen und Passwort mit HTTPS (SSL?). Die Webapplikation bietet auch 
eine REST API an, damit man ohne Explorer auf die Daten der MySQL 
Datenbank zugreifen kann.

Ich kann ohne Probleme mittels Explorer mit den Daten auf der Webpage 
arbeiten und auch mein C# Programm kann mittels REST API darauf 
zugreifen.


Problem:

Wenn ich längere Zeit nicht mit dem Explorer auf die Seite zugreife und 
dann mittels REST API und C# Datenabrufen will krieg ich ein Fehlercode 
401 zurück.

Verbinde ich mich mit dem Explorer auf die Seite, dann kann ich eine 
gewisse Zeit mittels REST API Daten abrufen. Nach einiger Zeit ohne den 
Explorer genutzt zu haben (z.b. Refreshpage) bekomme ich wieder die 
Fehlermeldung 401 mit der REST API.

Ich übergebe der API jedes mal den Usernamen und Passwort, trotzdem 
ergibt sich das beschriebene Fehlerbild.

Der Fehlercode 401 bedeutet: 401 Unauthorized Error


Ich hoffe jemand kann mir ein Tipps zur Fehlersuche geben.

Autor: Jonas B. (jibi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was für einen Restclient benutzt du zum Datenabfragen? Da kann man 
normalerweise eine Authentifizierung zum Request hinzufügen...
Ich kann die restlet für chrome empfehlen...

Autor: Torben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

als RestClient benutze ich ein Nuget Package (hier der Github Link), 
weil ich automatisiert auf die Daten zugreifen muss und nicht über die 
Webpage.

Ich hab mir Fiddler installiert, damit ich die Unterschiede zwischen 
Internet Explorer und dem C# Restclient sehen kann.

Was mir Kopfschmerzen macht ist, dass es nach einem Zugriff mit dem 
Internet Explorer, Chrome und Mozilla nur einige Zeit mittels dem C# 
RestClient funktioniert. Mit Internet Explorer, Chrome und Mozilla krieg 
ich nie einen Fehler 401.

Autor: Torben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Jonas B. (jibi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>als RestClient benutze ich ein Nuget Package (hier der Github Link),
>weil ich automatisiert auf die Daten zugreifen muss und nicht über die
>Webpage.

Schon klar, Rest ist ja auch nicht für "Menschen" gedacht.
Was für ein Link? ein restclient hilft dir bei der analyse..., da er die 
response aufbereitet für dich. ich wiederhohle mich gerne. use chrome + 
restlet client.

>Ich hab mir Fiddler installiert, damit ich die Unterschiede zwischen
>Internet Explorer und dem C# Restclient sehen kann.

Don't use this shit!
chrome oder firefox ist standard...
internet explorer benutzen nur behörden die von active-x nicht 
wegkommen.

Zeug mal den kompletten Code her!

Autor: Torben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
 TestRailClient client = new TestRailClient("die url zum server e.g. https://xyz.azurewebsites.net", username, password);
            client.OnOperationFailed += (sender, s) => Console.WriteLine(s);
            client.OnHTTPRequestSent += (sender, s) => Console.WriteLine(s);
            client.OnHTTPResponseReceived += (sender, s) => Console.WriteLine(s);


Wenn ich nun im Github code von hier 
https://github.com/zoosk/testrail-client/blob/master/TestRail/TestRailClient.cs 
schaue, dann ist sicherlich der Part interessant.
private CommandResult _CallTestRailGetEndpoint(string uri)
        {
            uri = _URL_ + uri;
            OnHTTPRequestSent(this, new HTTPRequestSentEventArgs("GET", new Uri(uri)));
            CommandResult cr;
            try
            {
                var request = (HttpWebRequest)WebRequest.Create(uri);
                request.AllowAutoRedirect = true;
                var authInfo = Convert.ToBase64String(Encoding.Default.GetBytes($"{_UserName_}:{_Password_}"));
                request.Headers["Authorization"] = $"Basic {authInfo}";
                request.UserAgent = "TestRail Client for .NET";
                request.Method = "GET";
                request.Accept = "application/json";
                request.ContentType = "application/json";

                // receive the response
                var response = (HttpWebResponse)request.GetResponse();
                var responseDataStream = response.GetResponseStream();
                var reader = new StreamReader(responseDataStream);
                var responseFromServer = reader.ReadToEnd();
                cr = new CommandResult(response.StatusCode == HttpStatusCode.OK, responseFromServer);
                reader.Close();
                response.Close();
            }
            catch (Exception e) { cr = new CommandResult(false, e.ToString()); }
            if (!cr.WasSuccessful)
            {
                OnOperationFailed(this, $"HTTP RESPONSE: {cr.Value}");
            }
            else
            {
                OnHTTPResponseReceived(this, cr.Value);
            }
            return cr;
        }

Autor: Jonas B. (jibi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Encoding mal auf UTF-8 und mal POST als Methode probieren...

Autor: Torben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, danke. Ich werd mal chrome + reslet benutzen und mir die 
Unterschiede anschauen beim Auth etc. anschauen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.