Delphi Can
Delphi RIO da THTTPRio.WebNode.BeforePost Değişikliği - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Genel Programlama (https://www.delphican.com/forumdisplay.php?fid=6)
+--- Konu Başlığı: Delphi RIO da THTTPRio.WebNode.BeforePost Değişikliği (/showthread.php?tid=4669)



Delphi RIO da THTTPRio.WebNode.BeforePost Değişikliği - vkamadan - 30-03-2020

Merhaba değerli üyeler , 
Delphi Tokyo (10.2) dahil olmak üzere Soap Web Servis istemci uygulamaları tarafında gerek zaman aşımını ayarlama gerekse ek HTTP Header bilgisi eklemek amacıyla , 
THTTPRIO nesnesinin WebNode özelliğinin BeforePost olayını aşağı da ki gibi kullanıyordum;

procedure TForm1.rio1HTTPWebNode1BeforePost(
  const HTTPReqResp: THTTPReqResp; Data: Pointer);
var TimeOut : integer;
intUserName , intPassWord : String ;
begin
TimeOut := 600000; // 10dk = (1000 * 60 * 10) ;

InternetSetOption(Data,
     INTERNET_OPTION_RECEIVE_TIMEOUT,
     Pointer(@TimeOut),
     SizeOf(TimeOut));


     intUserName := 'blabla';
     intPassWord := 'blabla';


     HttpAddRequestHeaders(Data, PChar(intUserName),
      Length(intUserName), HTTP_ADDREQ_FLAG_ADD);

      HttpAddRequestHeaders(Data, PChar(intPassWord),
      Length(intPassWord), HTTP_ADDREQ_FLAG_ADD);



end;

Delphi 10.2 ye kadar aşağıdaki gibi olan metodun deseni ;
procedure TForm1.rio1HTTPWebNode1BeforePost(const HTTPReqResp: THTTPReqResp; Data: Pointer);


Delphi RIO (10.3) itibariyle aşağıda ki gibi değişti ;
procedure TForm1.rio1HTTPWebNode1BeforePost(const HTTPReqResp: THTTPReqResp; Client: THTTPClient);

Data yerine Client geldi, 
Sorunuma geçmeden önce aydınlatıcı bir bilgi olarak , üstteki olan metodu içinde dönüş zaman aşımını uygulamak için ek yönteme gerek kalmadı THTTPRIO.HTTPWebNode.ReceiveTimeOut  özelliği olarak eklendi, dolayısıyla  InternetSetOption API sini kullanmaya gerek kalmamış oldu.

Ancak halen HttpAddRequestHeaders API sini kullanarak ek başlık gilbisi gönderme ihtiyacım var , ancak API nin talep ettiği Request in Pointer bilgisini önceden aldığım  Data değişkeni yeni metodda yer almadığı için takıldım, Data yerine gelen Client nesnesi ile yol almak gerekir düşüncesindeyim.


Cvp: Delphi RIO da THTTPRio.WebNode.BeforePost Değişikliği - vkamadan - 31-03-2020

(30-03-2020, Saat: 14:14)vkamadan Adlı Kullanıcıdan Alıntı: Merhaba değerli üyeler , 
Delphi Tokyo (10.2) dahil olmak üzere Soap Web Servis istemci uygulamaları tarafında gerek zaman aşımını ayarlama gerekse ek HTTP Header bilgisi eklemek amacıyla , 
THTTPRIO nesnesinin WebNode özelliğinin BeforePost olayını aşağı da ki gibi kullanıyordum;

procedure TForm1.rio1HTTPWebNode1BeforePost(
  const HTTPReqResp: THTTPReqResp; Data: Pointer);
var TimeOut : integer;
intUserName , intPassWord : String ;
begin
TimeOut := 600000; // 10dk = (1000 * 60 * 10) ;

InternetSetOption(Data,
     INTERNET_OPTION_RECEIVE_TIMEOUT,
     Pointer(@TimeOut),
     SizeOf(TimeOut));


     intUserName := 'blabla';
     intPassWord := 'blabla';


     HttpAddRequestHeaders(Data, PChar(intUserName),
      Length(intUserName), HTTP_ADDREQ_FLAG_ADD);

      HttpAddRequestHeaders(Data, PChar(intPassWord),
      Length(intPassWord), HTTP_ADDREQ_FLAG_ADD);



end;

Delphi 10.2 ye kadar aşağıdaki gibi olan metodun deseni ;
procedure TForm1.rio1HTTPWebNode1BeforePost(const HTTPReqResp: THTTPReqResp; Data: Pointer);


Delphi RIO (10.3) itibariyle aşağıda ki gibi değişti ;
procedure TForm1.rio1HTTPWebNode1BeforePost(const HTTPReqResp: THTTPReqResp; Client: THTTPClient);

Data yerine Client geldi, 
Sorunuma geçmeden önce aydınlatıcı bir bilgi olarak , üstteki olan metodu içinde dönüş zaman aşımını uygulamak için ek yönteme gerek kalmadı THTTPRIO.HTTPWebNode.ReceiveTimeOut  özelliği olarak eklendi, dolayısıyla  InternetSetOption API sini kullanmaya gerek kalmamış oldu.

Ancak halen HttpAddRequestHeaders API sini kullanarak ek başlık gilbisi gönderme ihtiyacım var , ancak API nin talep ettiği Request in Pointer bilgisini önceden aldığım  Data değişkeni yeni metodda yer almadığı için takıldım, Data yerine gelen Client nesnesi ile yol almak gerekir düşüncesindeyim.

Merhaba ,

ilgili metoda yeni gelen Client:THTTPClient nesnesinde yer alan CustomHeaders koleksiyonuyla işi çözebiliyoruz.
Client.CustomHeaders['login_username'] :=  'blabla';
Client.CustomHeaders['login_password'] :=  'blabla';

Aslında gayet güzel olmuş derli toplu ancak dokümantasyon olmayınca keşfetmek vakit alıyor.


Cvp: Delphi RIO da THTTPRio.WebNode.BeforePost Değişikliği - idealist - 26-12-2021

(31-03-2020, Saat: 09:46)vkamadan Adlı Kullanıcıdan Alıntı:
(30-03-2020, Saat: 14:14)vkamadan Adlı Kullanıcıdan Alıntı: Merhaba değerli üyeler , 
Delphi Tokyo (10.2) dahil olmak üzere Soap Web Servis istemci uygulamaları tarafında gerek zaman aşımını ayarlama gerekse ek HTTP Header bilgisi eklemek amacıyla , 
THTTPRIO nesnesinin WebNode özelliğinin BeforePost olayını aşağı da ki gibi kullanıyordum;

procedure TForm1.rio1HTTPWebNode1BeforePost(
  const HTTPReqResp: THTTPReqResp; Data: Pointer);
var TimeOut : integer;
intUserName , intPassWord : String ;
begin
TimeOut := 600000; // 10dk = (1000 * 60 * 10) ;

InternetSetOption(Data,
     INTERNET_OPTION_RECEIVE_TIMEOUT,
     Pointer(@TimeOut),
     SizeOf(TimeOut));


     intUserName := 'blabla';
     intPassWord := 'blabla';


     HttpAddRequestHeaders(Data, PChar(intUserName),
      Length(intUserName), HTTP_ADDREQ_FLAG_ADD);

      HttpAddRequestHeaders(Data, PChar(intPassWord),
      Length(intPassWord), HTTP_ADDREQ_FLAG_ADD);



end;

Delphi 10.2 ye kadar aşağıdaki gibi olan metodun deseni ;
procedure TForm1.rio1HTTPWebNode1BeforePost(const HTTPReqResp: THTTPReqResp; Data: Pointer);


Delphi RIO (10.3) itibariyle aşağıda ki gibi değişti ;
procedure TForm1.rio1HTTPWebNode1BeforePost(const HTTPReqResp: THTTPReqResp; Client: THTTPClient);

Data yerine Client geldi, 
Sorunuma geçmeden önce aydınlatıcı bir bilgi olarak , üstteki olan metodu içinde dönüş zaman aşımını uygulamak için ek yönteme gerek kalmadı THTTPRIO.HTTPWebNode.ReceiveTimeOut  özelliği olarak eklendi, dolayısıyla  InternetSetOption API sini kullanmaya gerek kalmamış oldu.

Ancak halen HttpAddRequestHeaders API sini kullanarak ek başlık gilbisi gönderme ihtiyacım var , ancak API nin talep ettiği Request in Pointer bilgisini önceden aldığım  Data değişkeni yeni metodda yer almadığı için takıldım, Data yerine gelen Client nesnesi ile yol almak gerekir düşüncesindeyim.

Merhaba ,

ilgili metoda yeni gelen Client:THTTPClient nesnesinde yer alan CustomHeaders koleksiyonuyla işi çözebiliyoruz.
Client.CustomHeaders['login_username'] :=  'blabla';
Client.CustomHeaders['login_password'] :=  'blabla';

Aslında gayet güzel olmuş derli toplu ancak dokümantasyon olmayınca keşfetmek vakit alıyor.


Üstat aynı metotları ( hatta fazladan birkaç yolda ) denedik ancak biz hata almaya devam ediyoruz?
Kod:
Client.CustomHeaders['Authorization'] := 'Basic ' + IdEncoderMIME1.EncodeString('user:password');



Cvp: Delphi RIO da THTTPRio.WebNode.BeforePost Değişikliği - vkamadan - 26-12-2021

(26-12-2021, Saat: 01:13)idealist Adlı Kullanıcıdan Alıntı:
(31-03-2020, Saat: 09:46)vkamadan Adlı Kullanıcıdan Alıntı: Merhaba ,

ilgili metoda yeni gelen Client:THTTPClient nesnesinde yer alan CustomHeaders koleksiyonuyla işi çözebiliyoruz.
Client.CustomHeaders['login_username'] :=  'blabla';
Client.CustomHeaders['login_password'] :=  'blabla';

Aslında gayet güzel olmuş derli toplu ancak dokümantasyon olmayınca keşfetmek vakit alıyor.


Üstat aynı metotları ( hatta fazladan birkaç yolda ) denedik ancak biz hata almaya devam ediyoruz?
Kod:
Client.CustomHeaders['Authorization'] := 'Basic ' + IdEncoderMIME1.EncodeString('user:password');

Merhaba , 
HTTP Basic Auth için ek header eklemenize gerek yok , 
HTTPRIO nesnenizin HTTPWebNode özelliği altındaki UserName ve Password alanlarını doldurmanız yeterli.


Cvp: Delphi RIO da THTTPRio.WebNode.BeforePost Değişikliği - idealist - 26-12-2021

(26-12-2021, Saat: 13:30)vkamadan Adlı Kullanıcıdan Alıntı:
(26-12-2021, Saat: 01:13)idealist Adlı Kullanıcıdan Alıntı: Üstat aynı metotları ( hatta fazladan birkaç yolda ) denedik ancak biz hata almaya devam ediyoruz?
Kod:
Client.CustomHeaders['Authorization'] := 'Basic ' + IdEncoderMIME1.EncodeString('user:password');

Merhaba , 
HTTP Basic Auth için ek header eklemenize gerek yok , 
HTTPRIO nesnenizin HTTPWebNode özelliği altındaki UserName ve Password alanlarını doldurmanız yeterli.


Cevap için tekrar teşekkürler Üstat,

Portal Kullanıcı bilgilerini Şifresiz göndermemiz gerekiyormuş... Biz şifreli gönderdiğimiz için hata alıyormuşuz... @mksoft Üstadın da yardımıyla çözüme ulaştık