Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi JSON Antworten? (https://www.delphipraxis.net/167775-json-antworten.html)

thechosen1 17. Apr 2012 20:27

JSON Antworten?
 
Ich versuche mit Delphi auf die Facebook Graph API zu zugreifen:
(Genau genommen möchte ich die Freundesliste eines Nutzers auslesen)

Mit Indy:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  sResponse: string;
begin
  sResponse := IdHTTP1.GET('https://graph.facebook.com/me/friends?&access_token=' + token);
  finally
  Data.Free;
end;
(Alternativ auch über HTTP "POST")

Mit TWebbrowser:
Delphi-Quellcode:
twebbrowser1.navigate('https://graph.facebook.com/me/friends?&access_token=' + token)
Allerdings können weder Indy noch TWebbrowser mit JSON umgehen. Indy gibt einen Zugriffsverletzungsfehler aus, wärend TWebbrowser das InternetExplorer Download Fenster öffnet und die Meldung zeigt, dass die angegebene Seite nicht heruntergeladen werden kann.

Gibt es alternative Komponente, welche mit JSON Antworten umgehen können, oder wie könnte ich das Problem lösen?

BUG 17. Apr 2012 20:35

AW: JSON Antworten?
 
Das Problem wird imho weniger das JSON sein, sondern HTTPS.

thechosen1 17. Apr 2012 20:41

AW: JSON Antworten?
 
TWebbrowser sollte mit SSL umgehen können, und IdHTTP verwende ich zusammen mit IdSSLIOHandlerSocket1 und der Open SSL libary. Ich habe es natürlich bereits (erfolgreich) an anderen Seiten ausprobiert. Hinzukommend kann ich auf Facebook Open Graph Links die nur einen String zurück geben aber dennoch über HTTPS aufgerufen werden erfolgreich benutzen.

Somit liegt es nicht an der Verwendung von HTTPS.

geskill 17. Apr 2012 21:20

AW: JSON Antworten?
 
Spiel das ganze am besten mit dem Opera Browser nach und logge die Aktivität mit Wireshark. Dann verwende genau die Parameter die der Opera Browser benutzt hat; so muss es funktionieren ;)

EDIT:
Sehe gerade das geht via HTTPS, da muss du dann Fiddler und IE arbeiten. Das ist ein bisschen blöd, weil du dann erst ein manipuliertes SSL Zertifikat installieren musst, aber so kommst du auch an den Traffic.

thechosen1 17. Apr 2012 22:23

AW: JSON Antworten?
 
Das Problem ist, dass der Internetexplorer diese Links ebensowenig handlen kann: Geb ich meine URL: "https://graph.facebook.com/me/friends?access_token=AAAAAAxxxxxxx" in die Adressleiste des IExplorers (ver. 8) ein tritt das von mir im Zusammenhang mit dem TWebbrowser beschriebene Phänomän auf: Anstelle die Antwort im Browser darzustellen öffnet sich das IE Download-Fenster. In der Regel tritt dazu die beschriebene Fehlermeldung auf.
Da IE selbst nicht richtig mit der Anfrage umgehen kann ich leider auch mit Fiddler nicht viel anfangen :(

Verwende ich hingegen Firefox oder Opera bekomm ich die erwartete Darstellung im Browser:
Code:
{
   "data": [
      {
         "name": "Max Mustermann",
         "id": "8989489944"
      },
      {
         "name": "Marianne Mustermann",
         "id": "4556667444"
      }
Ich muss zugeben, dass ich zwar schon eine Menge Web-basierte Programme in Delphi geschrieben habe aber bisher nie auf solche Probleme gestoßen bin und daher in diesem Bereich noch Anfänger bin (auch hinsichtlich Wireshark).
Bei meinen Recherchen bin ich auf verschiedene Quellen gestoßen in denen behauptet wird, dass die Indy Komponente überhaupt nicht mit JSON umgehen kann)
Ich frage mich, ob es nicht eine einfache Methode gibt, die JSON Antwort als TStrings zu bekommen?

In Visual C# lässt es sich beispielsweiße ziemlich einfach realisieren: (Kan man in Delphi auf diese .NET Funktion zugreifen?)
Code:
 
try
 {
  Antwort = myWebClient.DownloadData(GraphURL);
  MessageBox.Show(System.Text.Encoding.ASCII.GetString(Antwort));              
 }
Dummerweiße habe ich bereits mehrere Wochen in die restlichen Teile des Programms gesteckt (FB Chat, Photoupload etc.) und möchte deswegen ungern auf C# umsteigen ;)
(Eine Notlösung wäre es ein weiteres Programm in C# zu schreiben, dass die friendlist zurück an das delphi gibt)

Sir Rufo 17. Apr 2012 22:33

AW: JSON Antworten?
 
Die Indys brauche auch mit JSON nicht umgehen, weil das ist einfacher Text der zurückgeliefert wird - nur halt strukturiert :)

BUG 17. Apr 2012 22:38

AW: JSON Antworten?
 
Wenn es die anderen Browser annehmen, dann könnte es auch in Richtung Content-Type gehen, afaik verhält sich der IE da manchmal komisch :gruebel:
Fiddler funktioniert auch mit Firefox.

Thom 18. Apr 2012 00:49

AW: JSON Antworten?
 
Du benötigst einen JSON-Parser, den es auch in Delphi gibt.

Valle 18. Apr 2012 06:25

AW: JSON Antworten?
 
Das kann ja alles sein, aber sein Problem ist Momentan eher, dass Indy eine Zugriffsverletzung ausgiebt. TIdHTTP kümmert sich ja nicht um den Inhalt, sondern lädt ihn nur runter. Es muss nachwievor an HTTPS liegen.

TWebBrowser ist m.E. dafür sowieso absolut nicht das richtige.

Liebe Grüße,
Valentin

jaenicke 18. Apr 2012 08:12

AW: JSON Antworten?
 
Zitat:

Zitat von Valle (Beitrag 1162430)
Das kann ja alles sein, aber sein Problem ist Momentan eher, dass Indy eine Zugriffsverletzung ausgiebt. TIdHTTP kümmert sich ja nicht um den Inhalt, sondern lädt ihn nur runter.

Das ist ein Irrglaube. :zwinker:
Es gibt mehrere Seiten, bei denen Indy mit einer Zugriffsverletzung aussteigt.

Da bisher aber weder die genaue Exception noch der Stacktrace gepostet wurden, kann ich dazu auch nix näheres sagen... bisher ließ sich das immer lösen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:28 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz