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.
Und du hast als Request auch angegeben das du Json haben willst?
httpWebRequest.Accept = "application/json";
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());
}
Versuch noch zusätzlich
httpWebRequest.ContentType = "application/json";
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();
}
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
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
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());
}