myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Web-Technologien » Warum liefert gleicher Request vom Browser und vom HttpWebRequest anderes Ergebnis?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Warum liefert gleicher Request vom Browser und vom HttpWebRequest anderes Ergebnis?

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Exception234
myCSharp.de-Mitglied

Dabei seit: 28.09.2020
Beiträge: 5


Exception234 ist offline

Warum liefert gleicher Request vom Browser und vom HttpWebRequest anderes Ergebnis?

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Huhu, hat hier jemand nen kleinen Tipp?

die Browseranfrage (FireFox,Edge)  https://myserver/rest/api/2/search?jql=s...en&maxResults=0 liefert:

XML-Code:
startAt 0
maxResults 0
total    3651
issues []

die gleiche Anfrage via WebRequest liefert: startAt: 0, maxResults: 0; total: 0, issues: [] unglücklich

C#-Code:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://myserver/rest/api/2/search?jql=status%20=%20Open&maxResults=0");

try
{
request.Credentials =  new NetworkCredential(connection.username, connection.password);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream receiveStream = response.GetResponseStream();
StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8);
Console.WriteLine("Response stream received.");
Console.WriteLine(readStream.ReadToEnd());
response.Close();
readStream.Close();
}
catch (Exception e) { Console.WriteLine(e); }

Ich brauche den value "total" des Headers .. er bleibt immer 0
28.09.2020 14:07 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.280
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Der gleiche Request wirds mit Sicherheit nicht sein, weil ein mal der Request vom Browser (und dessen Kontext) verschickt wird und ein mal von Deinem Code.
Unterschiede siehst Du am schnellsten mit einem Tool wie Fiddler. So sieht niemand ausser Du, worin sich die Requests unterscheiden; ergo kannst auch nur Du das prüfen ;-)

Daher lad Dir  https://www.telerik.com/fiddler und schau nach, was Firefox da wirklich verschickt, was Du eben so nicht siehst.
Alternativ kannst Du auch die Developer Tools zB von Chrome verwenden und Dir die Inhalte im Request Tab anschauen.

Was für eine solche REST API absolut untypisch ist, dass diese eine Basic Authentication verwendet und damit mit NetworkCredentials nutzbar wäre.
Normalerweise sind das Token-basierte APIs.

PS: Seit mehreren Jahren ist der WebRequest obsolete. Bitte den HttpClient verwenden.
28.09.2020 14:22 Beiträge des Benutzers | zu Buddylist hinzufügen
Exception234
myCSharp.de-Mitglied

Dabei seit: 28.09.2020
Beiträge: 5

Themenstarter Thema begonnen von Exception234

Exception234 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Danke dir Abt ... künftig nur noch HttpClient :)

C#-Code:
static HttpClient GetClient(string username, string password)
{
   AuthenticationHeaderValue authValue = new AuthenticationHeaderValue
   ("Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes($"{username}:{password}")));

   HttpClient client = new HttpClient()
   {
       DefaultRequestHeaders = { Authorization = authValue }
   };
    return client;
}

async Task request()
{
   HttpClient client = GetClient(connection.username, connection.password);
   string response = await client.GetStringAsync("https://myserver/rest/api/2/search?jql=status%20=%20Open&maxResults=0");
   Console.WriteLine(response);
}
07.10.2020 17:05 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.280
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Dann direkt noch der Hinweis auf die HttpClient Doku: HttpClient nicht dauernd instanziieren sondern entweder die HttpClientFactory zu verwenen oder nur ein einziges Mal die Instanz erzeugen:

Zitat von https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient?view=netcore-3.1:
HttpClient is intended to be instantiated once and re-used throughout the life of an application. Instantiating an HttpClient class for every request will exhaust the number of sockets available under heavy loads. This will result in SocketException errors. Below is an example using HttpClient correctly.
07.10.2020 17:07 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 24.10.2020 16:37