Laden...

JSON Download über HTTPWEBREQUEST

Erstellt von tamilsuriyan vor 8 Jahren Letzter Beitrag vor 8 Jahren 2.262 Views
T
tamilsuriyan Themenstarter:in
35 Beiträge seit 2007
vor 8 Jahren
JSON Download über HTTPWEBREQUEST

Hallo zusammen,
ich hänge derzeit an einem Problem, wo ich nicht weiterkomme.

Also ich habe einen Link über dem ich eine Json Datei bekomme. IE bietet mir über den Link einen Speichern unter Dialog an und Firefox zeigt mir den Inhalt der Datei direkt im Browser an. Die Link hat keine Dateiendung also kein direkter Link zur Datei!

Ich versuche derzeit die über den gegebenen Link die JSON Datei über HTTPWEBREQUEST herunterzuladen. Diese liefert mir einen HTML Datei zurück welches Javascript enthält. Das Skript nimmt den Link über Location.href an und leitet es wieder an den Link weiter.

Ich konnte bisher den zwischen Link abfangen, welches allerdings identisch mit dem Ursprungslink ist. So mein Problem ist, dass ich die JSON Datei nicht herunterladen kann. Ich bekomme jedesmal nur die HTML Datei. Leider kann ich serverseitig nicht beeinflussen. Wie kann ich da vorangehen und an den die JSON Datei über HTTPWEBREQUEST herunterladen? Über Browser gehts.

Zur besseren Verständnis hab ich kurz den Ist-Zustand nochmal vereinfacht unten.
LINK -> HTML (JAVASCRIPT WEITERLEITUNG AN DEN URSPRUNGSLINK) -> JSON

Mein aktueller Zustand.
LINK -> LIEFERT HTML ZURÜCK

Ich hoffe, dass ich mein Problem verständlich beschrieben hab.

Danke im Voraus.

F
10.010 Beiträge seit 2004
vor 8 Jahren

Und du hast als Request auch angegeben das du Json haben willst?


httpWebRequest.Accept = "application/json";

T
tamilsuriyan Themenstarter:in
35 Beiträge seit 2007
vor 8 Jahren

Ja hab ich. So hab ich es probiert.

HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(newURL);
myHttpWebRequest.Credentials = CredentialCache.DefaultNetworkCredentials;
myHttpWebRequest.Method = WebRequestMethods.Http.Get;
myHttpWebRequest.Accept = "application/json";
HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
var content = myHttpWebResponse.GetResponseStream();
using (StreamReader sr = new StreamReader(content))
{
      Console.WriteLine(sr.ReadToEnd());                        
}
F
10.010 Beiträge seit 2004
vor 8 Jahren

Versuch noch zusätzlich

httpWebRequest.ContentType = "application/json";
T
tamilsuriyan Themenstarter:in
35 Beiträge seit 2007
vor 8 Jahren

Das hab ich auch schon versucht. Leider ohne Erfolg.

Ich hab auch jetzt in einer Schleife auch alle möglichen Weiterleitungen abgefangen und probiert. Bekomme trotzdem jedesmal als Respone text/html zurück.

public HttpWebRequest GetNewRequest(string targetUrl)
        {
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(targetUrl);
            request.Credentials = CredentialCache.DefaultNetworkCredentials;
            request.CookieContainer = new CookieContainer(); // = SessionCookieContainer;
            request.ContentType = "application/json";
            request.AllowAutoRedirect = false;
            return request;
        }

            HttpWebRequest request = GetNewRequest(targetUrl);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            while (response.StatusCode == HttpStatusCode.Found)
            {
                Console.WriteLine(response.ContentType);
                response.Close();
                request = GetNewRequest(response.Headers["Location"]);
                response = (HttpWebResponse)request.GetResponse();
            }
3.170 Beiträge seit 2006
vor 8 Jahren

Hallo,

möglicherweise hängt das auch mit Cookies zusammen. Sprich, wenn ein bestimmter Cookie gesetzt ist, bekommst Du das JSON, ist er noch nicht gesetzt, bekommst Du das HTML.
Um das zu überprüfen, müsstest Du die Adresse zweimal jhintereinander aufrufen (tust Du ja auch schon), und dabei jeweils die gleiche Instanz des CookieContainers für beide Requests verwenden (statt immer ienen neuen Contaier zu erstellen).

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

T
tamilsuriyan Themenstarter:in
35 Beiträge seit 2007
vor 8 Jahren

Habs grad ausprobiert. Weiterhin nur html 😦

3.170 Beiträge seit 2006
vor 8 Jahren

Hallo,

dann schau Dir mal im Firebug oder in den mit Firefox gelieferten Entwickler-Tools die beiden Requests (die im Browser HTML bzw. JSON liefern) genau an (die vollständigen Header). Da muss es irgendwelche Unterschied geben. Wenn Du die findest, kriegst Du bestimmt auch Dein JSON abgerufen.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

T
tamilsuriyan Themenstarter:in
35 Beiträge seit 2007
vor 8 Jahren

Ich habs 😃 Das lag wirklich an Cookie. Bei der obenstehenden Code hab ich eine Statuscode-Überprüfung drin. Ich bekomme da nicht StatusCode Found zurück, sondern StatusCode OK.


HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(targetUrl);
request.Credentials = CredentialCache.DefaultNetworkCredentials;
request.CookieContainer = new CookieContainer(); 
request.ContentType = "application/json";
request.AllowAutoRedirect = true;

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
var content = response.GetResponseStream();
using (StreamReader sr = new StreamReader(content))
{
       Console.WriteLine(sr.ReadToEnd());
}