Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   GET request mit JSON Antwort (https://www.delphipraxis.net/197034-get-request-mit-json-antwort.html)

MyRealName 12. Jul 2018 18:35

GET request mit JSON Antwort
 
Hi,

normalerweise arbeite ich mit RealThinClient um meine Inet Sachen zu machen, aber ich krieg bes da nicht hin im Moment und meine Sub ist im Mai abgelaufen, kann da also gerade nicht nachfragen.

Also ich habe eine URL an die ich ein GET request senden kann, die liefert mir ein JSON zurück mit der Antwort. Es geht da um PLZ Abfrage hier in Kolumbien.
Die Webseite ist http://www.codigopostal.gov.co und hat ein einfaches Eingabefeld, wo man die Adresse eingibt (die Seite lädt dann über google api Vorschläge, aber das brauch ich nicht). Wenn man dann sucht, kommt die PLZ zurück

Zum Bsp gebe ich dort ein :
Zitat:

Cra. 16 #20-06, Santa Marta, Magdalena, Colombia
dann kommt die URL so raus :
Code:
http://www.codigopostal.gov.co/glow/param/?municipio=Santa%20Marta&departamento=Magdalena&direccion=Cra.%2016%20%231c-20
und die Antwort in JSON sieht so aus :
Code:
{"cp":"470001","cp_ampliado":"470001211","direccion_estandar":"KR 16-1 20, 47001000","infor_enriquecimiento":null,"lat":"11.2563645293221","lon":"-74.198816835671","status":"200","wkid":"4326"}
Was ich halt gerne hätte ist dass ich meine Kundendaten nehmen kann, wo ich die Felder der Suche schon habe und mit die URL zusammenbaue und die PLZ abfragen kann. Die abfagte senden ging in RTC, aber aus irgendeinem grund kriege ich da immer nur Error 400, was ein 10.-sekunden timeout ist, aber im JSON format, also ist schon eine Antwort.

Gibt es noch andere wege ?

TiGü 13. Jul 2018 09:38

AW: GET request mit JSON Antwort
 
Zitat:

Zitat von MyRealName (Beitrag 1407061)
Gibt es noch andere wege ?

Ich bin mir nicht sicher, ob deine Frage ist, ob wir dir andere Frameworks/Komponenten nennen sollen und aufzeigen, wie es mit denen geht.

Aber wenn ja, dann kannst du mit den mitgelieferten HTTP-Komponenten bspw. so die JSON-Antwort erhalten:

Delphi-Quellcode:
uses
  System.Net.HttpClient;

{$R *.dfm}
const
  ADDRESS = 'http://www.codigopostal.gov.co/glow/param/?municipio=Santa%20Marta&departamento=Magdalena&direccion=Cra.%2016%20%231c-20';

procedure TForm3.Button2Click(Sender: TObject);
var
  HttpClient: System.Net.HttpClient.THTTPClient;
  Response: System.Net.HttpClient.IHTTPResponse;
  Content: string;
begin
  HttpClient := THTTPClient.Create;
  try
    Response := HttpClient.Get(ADDRESS);
    if Assigned(Response) then
    begin
      if Response.StatusCode = 200 then
      begin
        Content := Response.ContentAsString;
        Memo1.Lines.Add(Content);
      end;
    end;
  finally
    HttpClient.Free;
  end;
end;

TiGü 13. Jul 2018 10:22

AW: GET request mit JSON Antwort
 
Selbstverständlich geht auch die Nutzung des Delphi eigenen REST-Frameworks:

Delphi-Quellcode:
uses
  REST.Client,
  IPPeerClient,
  System.Json;

procedure TForm3.Button1Click(Sender: TObject);
var
  RESTClient: TRESTClient;
  RESTRequest: TRESTRequest;
  RESTResponse: TRESTResponse;
  MyBytes: TBytes;
  MyJsonValue: TJSONValue;
begin
  RESTClient := TRESTClient.Create(nil);
  RESTRequest := TRESTRequest.Create(nil);
  RESTResponse := TRESTResponse.Create(nil);
  try
    RESTClient.BaseURL := 'http://www.codigopostal.gov.co';
    RESTClient.RaiseExceptionOn500 := False;

    RESTRequest.Client := RESTClient;
    RESTRequest.AddParameter('municipio', 'Santa Marta');
    RESTRequest.AddParameter('departamento', 'Magdalena');
    RESTRequest.AddParameter('direccion', 'Cra. 16 1c-20');
    RESTRequest.Resource := 'glow/param';
    RESTRequest.Response := RESTResponse;
    RESTRequest.SynchronizedEvents := False;

    RESTRequest.Execute;
    // Alternativ gibt es noch die Möglichkeit das Asyncron auszuführen und
    // wenn gewünscht automatisch in den Mainthread zurück synchronisieren zu lassen
    // RESTRequest.ExecuteAsync(MussteFüllen);

    if RESTResponse.StatusCode = 200 then
    begin
      // Hier gibt es mehrere Möglichkeiten den empfangenden Content abzugreifen:

      // Einmal als reiner String:
      Memo1.Lines.Add(RESTResponse.Content);

      // Oder als Bytes-Array:
      MyBytes := RESTResponse.RawBytes;

      // Für dich am sinnvollsten wäre das schon geparste JSON-Object/Value:
      MyJsonValue := RESTResponse.JSONValue;
    end;
  finally
    RESTClient.Free;
    RESTRequest.Free;
    RESTResponse.Free;
  end;
end;

MyRealName 13. Jul 2018 18:46

AW: GET request mit JSON Antwort
 
Danke, die 2. Lösung gefällt mir gut, weil ich die Parameter direkt so reintun kann, wie ich sie schon in der DB habe. Und funktioniert sofort :)

Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:23 Uhr.

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