AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke GET request mit JSON Antwort

GET request mit JSON Antwort

Ein Thema von MyRealName · begonnen am 12. Jul 2018 · letzter Beitrag vom 13. Jul 2018
Antwort Antwort
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Santa Marta / Colombia
308 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

GET request mit JSON Antwort

  Alt 12. Jul 2018, 17:35
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 ?
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
1.805 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

AW: GET request mit JSON Antwort

  Alt 13. Jul 2018, 08:38
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;
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
1.805 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

AW: GET request mit JSON Antwort

  Alt 13. Jul 2018, 09:22
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;
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Santa Marta / Colombia
308 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: GET request mit JSON Antwort

  Alt 13. Jul 2018, 17:46
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!
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2018 by Daniel R. Wolf