Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Rest Server
#1
Merhaba

Postman ile servise Get metodu ile Body içerisinde 

{
   "CARI_REF": 6823,
   "DATA_TUR": 1,
   "DATA_TARIH": "2024-09-30T16:00:00"
}

rest%2001.jpg

veri gönderiyorum. Buna göre de servis yazdım gönderilen verilere göre JSON dönüyor. Fakat 3 gündür Postmandan gönderdiğim veriyi Delphiden gönderemedim. Çıldırcağım.

Bu şekliyle veriyi nasıl gönderirim? 
İyi çalışmalar
Cevapla
#2
Nasil bir hata aldiniz? SSL hatasi da aliyor olabilirsiniz.

uses
  System.SysUtils, System.Classes, System.JSON, System.Net.HttpClient;

procedure SendGetRequest;
var
 HttpClient: TNetHTTPClient;
 Response: IHTTPResponse;
 JsonParam: string;
 URL: string;
begin
 // Create an instance of the HTTP client
 HttpClient := TNetHTTPClient.Create(nil);
 try
   // Example JSON structure as a query parameter
   JsonParam := TJSONObject.Create
     .AddPair('name', 'John Doe')
     .AddPair('age', '30')
     .ToJSON;

   // Encode the JSON string for a URL
   JsonParam := TNetEncoding.URL.Encode(JsonParam);

   // Construct the full URL with the JSON parameter
   URL := 'https://example.com/api/resource?json=' + JsonParam;

   // Send the GET request
   Response := HttpClient.Get(URL);

   // Handle the response
   if Response.StatusCode = 200 then
     ShowMessage('Success: ' + Response.ContentAsString())
   else
     ShowMessage('Error: ' + Response.StatusCode.ToString);
 finally
   HttpClient.Free;
 end;
end;
Cevapla
#3
HTTP protokolunü kullandığından SSL sorunu yok, fakat tasarımsal bir sorun var. GET metodu body içermemeli.
REST mimarilierinde, Body bilgisi POST ile gönderilir. 
Sorunun kaynağı bu olabilir.
Begin : = end / 2;
Cevapla
#4
Bu şekilde deyin.

IdHTTP1.Request.UserAgent := 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0';

IdHTTP1.HTTPOptions := IdHTTP1.HTTPOptions + [hoKeepOrigProtocol];
Cevapla
#5
(09-10-2024, Saat: 13:36)RAD Coder Adlı Kullanıcıdan Alıntı: HTTP protokolunü kullandığından SSL sorunu yok, fakat tasarımsal bir sorun var. GET metodu body içermemeli.
REST mimarilierinde, Body bilgisi POST ile gönderilir. 
Sorunun kaynağı bu olabilir.

Sorun body içerisinde göndermemden galiba, mkysoft koduyla çözüm sağladım. 

GET metodunda HEADER içinde bilgi gönderebiliyorum değil mi? (Token kullanan servisler header için gönderiyor diye düşünüyorum) Bununla ilgili bir örnek bulamadım. 

CARI_REF=Request.ContentFields.Values['CARI_REF'])  i alıyorum. 

Header içinde gönderilen (Authorization veya faklı) parametreleri nasıl alıyoruz?
Cevapla
#6
(17-10-2024, Saat: 10:56)m_ekici Adlı Kullanıcıdan Alıntı:
(09-10-2024, Saat: 13:36)RAD Coder Adlı Kullanıcıdan Alıntı: HTTP protokolunü kullandığından SSL sorunu yok, fakat tasarımsal bir sorun var. GET metodu body içermemeli.
REST mimarilierinde, Body bilgisi POST ile gönderilir. 
Sorunun kaynağı bu olabilir.

Sorun body içerisinde göndermemden galiba, mkysoft koduyla çözüm sağladım. 

GET metodunda HEADER içinde bilgi gönderebiliyorum değil mi? (Token kullanan servisler header için gönderiyor diye düşünüyorum) Bununla ilgili bir örnek bulamadım. 

CARI_REF=Request.ContentFields.Values['CARI_REF'])  i alıyorum. 

Header içinde gönderilen (Authorization veya faklı) parametreleri nasıl alıyoruz?


Header'ın, istek metodlarına (GET, POST, PUT vb) bağımlılığı yoktur. İsteğin bir parçasıdır. 
Bu nedenle her metod için header set edebilirsiniz.
Begin : = end / 2;
Cevapla
#7
(17-10-2024, Saat: 10:56)m_ekici Adlı Kullanıcıdan Alıntı:
(09-10-2024, Saat: 13:36)RAD Coder Adlı Kullanıcıdan Alıntı: HTTP protokolunü kullandığından SSL sorunu yok, fakat tasarımsal bir sorun var. GET metodu body içermemeli.
REST mimarilierinde, Body bilgisi POST ile gönderilir. 
Sorunun kaynağı bu olabilir.

Sorun body içerisinde göndermemden galiba, mkysoft koduyla çözüm sağladım. 

GET metodunda HEADER içinde bilgi gönderebiliyorum değil mi? (Token kullanan servisler header için gönderiyor diye düşünüyorum) Bununla ilgili bir örnek bulamadım. 

CARI_REF=Request.ContentFields.Values['CARI_REF'])  i alıyorum. 

Header içinde gönderilen (Authorization veya faklı) parametreleri nasıl alıyoruz?

Anladığım Kadarıyla bir client uygulamadan (örn. mobil) header içinde göndereceğiniz bir bilgiyi sunucu tarafında okumak istiyorsunuz. 

   

   

   



Mobil tarafta gönderdiğimiz header içeriğini görmek için dönen JSON içine ekledim. 
Header daki veriyi siz sunucudan tekrar mobile geri döndürmeyin sakın.   Wink

procedure TWebModule1.WebModule1headertestAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
 HeaderOzelBilgi: string;
begin
 HeaderOzelBilgi := Request.GetFieldByName('OzelBilgi');
 Response.Content := '{"success":{"message":"Ars REST Server","status_code":200, "OzelBilgi":"' + HeaderOzelBilgi + '"}}';
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
 RESTRequest1.Params.Clear;
 RESTRequest1.Params.AddItem('OzelBilgi', edtHeaderBilgisi.Text, TRESTRequestParameterKind.pkHTTPHEADER,
   [TRESTRequestParameterOption.poDoNotEncode]);
 RESTRequest1.Execute;
 if RESTResponse1.Status.SuccessOK_200 then
 begin
   Memo1.Lines.Add('İşlem Başarılı!');
   Memo1.Lines.Add('______________________________________________________');
   Memo1.Lines.Add('Sonuç:');
   Memo1.Lines.Add(RESTResponse1.JSONValue.Format());
   Memo1.Lines.Add('______________________________________________________');
   Memo1.Lines.Add('Header Özel Bilgi:');
   Memo1.Lines.Add(RESTResponse1.JSONValue.P['success.OzelBilgi'].Value);

 end
 else
   Memo1.Text := RESTResponse1.Content;
end;

object RESTClient1: TRESTClient
 Accept = 'application/json, text/plain; q=0.9, text/html;q=0.8,'
 AcceptCharset = 'utf-8, *;q=0.8'
 BaseURL = 'http://localhost:8080/headertest'
 Params = <>
 SynchronizedEvents = False
 Left = 48
 Top = 8
end
object RESTRequest1: TRESTRequest
 AssignedValues = [rvConnectTimeout, rvReadTimeout]
 Client = RESTClient1
 Params = <>
 Response = RESTResponse1
 SynchronizedEvents = False
 Left = 56
 Top = 72
end
object RESTResponse1: TRESTResponse
 ContentType = 'application/json'
 Left = 56
 Top = 128
end
Begin : = end / 2;
Cevapla
#8
Vaktinizi aldım, teşekkür ederim.
Cevapla
#9
(18-10-2024, Saat: 11:39)m_ekici Adlı Kullanıcıdan Alıntı: Vaktinizi aldım, teşekkür ederim.

Sorun değil, destek için burdayız.
Begin : = end / 2;
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Rest.JSON array serilize hk yhackup 11 428 28-11-2024, Saat: 12:35
Son Yorum: delphi.developer
  Rest Hata Yakalama m_ekici 13 2.376 15-08-2024, Saat: 17:32
Son Yorum: mrmarman
  Rest Server Windows Sunucuda Yayınlama ugorkem 6 392 14-08-2024, Saat: 18:48
Son Yorum: ugorkem
  Delphi SQL Connection & TCP Server hakkında yanniosman 3 756 11-06-2024, Saat: 17:38
Son Yorum: Tuğrul HELVACI
  server programinda hani veritabani dogru olur. sadikacar60 4 656 30-01-2024, Saat: 21:06
Son Yorum: sadikacar60



Konuyu Okuyanlar: 1 Ziyaretçi