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.
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...
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.
>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!
Hallo,
1 | TestRailClient client = new TestRailClient("die url zum server e.g. https://xyz.azurewebsites.net", username, password); |
2 | client.OnOperationFailed += (sender, s) => Console.WriteLine(s); |
3 | client.OnHTTPRequestSent += (sender, s) => Console.WriteLine(s); |
4 | 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.
1 | private CommandResult _CallTestRailGetEndpoint(string uri) |
2 | {
|
3 | uri = _URL_ + uri; |
4 | OnHTTPRequestSent(this, new HTTPRequestSentEventArgs("GET", new Uri(uri))); |
5 | CommandResult cr; |
6 | try
|
7 | {
|
8 | var request = (HttpWebRequest)WebRequest.Create(uri); |
9 | request.AllowAutoRedirect = true; |
10 | var authInfo = Convert.ToBase64String(Encoding.Default.GetBytes($"{_UserName_}:{_Password_}")); |
11 | request.Headers["Authorization"] = $"Basic {authInfo}"; |
12 | request.UserAgent = "TestRail Client for .NET"; |
13 | request.Method = "GET"; |
14 | request.Accept = "application/json"; |
15 | request.ContentType = "application/json"; |
16 | |
17 | // receive the response
|
18 | var response = (HttpWebResponse)request.GetResponse(); |
19 | var responseDataStream = response.GetResponseStream(); |
20 | var reader = new StreamReader(responseDataStream); |
21 | var responseFromServer = reader.ReadToEnd(); |
22 | cr = new CommandResult(response.StatusCode == HttpStatusCode.OK, responseFromServer); |
23 | reader.Close(); |
24 | response.Close(); |
25 | }
|
26 | catch (Exception e) { cr = new CommandResult(false, e.ToString()); } |
27 | if (!cr.WasSuccessful) |
28 | {
|
29 | OnOperationFailed(this, $"HTTP RESPONSE: {cr.Value}"); |
30 | }
|
31 | else
|
32 | {
|
33 | OnHTTPResponseReceived(this, cr.Value); |
34 | }
|
35 | return cr; |
36 | }
|
Ok, danke. Ich werd mal chrome + reslet benutzen und mir die Unterschiede anschauen beim Auth etc. anschauen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.