Delphi THTTPRIO Spring Security Sorunu
Forum kuralları
Bu forum sadece yapacağınız işle alakalı doğru bileşeni bulmak içindir. Şöyle bir şey yapmam lazım, hangi bileşeni kullanıyım diyorsanız, doğru yerdesiniz.
Bu forum sadece yapacağınız işle alakalı doğru bileşeni bulmak içindir. Şöyle bir şey yapmam lazım, hangi bileşeni kullanıyım diyorsanız, doğru yerdesiniz.
-
- Üye
- Mesajlar: 5
- Kayıt: 26 Kas 2021 06:01
Delphi THTTPRIO Spring Security Sorunu
Arkadaşlar merhaba xe8 ile bir webservisten veri çekmem gerekiyor THTTPRIO bileşeni ile bağlanmaya çalıştığımda spring security application login prompt ekranı geliyor. Ne yaptıysam bir türlü o windows auth formunu aşamadım. Kod aşağıdaki gibi.
Webservisin wsincome metoduna string değeri verdiğim satıra gelince gelir bu windows auth formu. Ayrıca
Rio.HTTPWebNode.GetHTTPReqResp.UserName:='webservis';
Rio.HTTPWebNode.GetHTTPReqResp.Password:='webservis123.';
bu satırları kaldırınca da direk 401 authentication fail alıyorum.
var
WebServis:WsIncome;
str:string;
user, pass : TSimpleHeader;
Stream: TMemoryStream;
StrStream: TStringStream;
begin
Stream := TMemoryStream.Create;
StrStream := Tstringstream.Create(s);
InvRegistry.RegisterHeaderClass(TypeInfo(WsIncome), userName, '...', 'http://...:8080/Stawiz/WsIncome');
InvRegistry.RegisterHeaderClass(TypeInfo(WsIncome), password,'...', 'http://...:8080/Stawiz/WsIncome');
rio.WSDLLocation:='http://...:8080/Stawiz/WsIncome?wsdl';
Rio.URL:='http://...:8080/Stawiz/WsIncome';
rio.Service:='WsIncome';
rio.Port:='BasicHttpBinding_WsIncome';
rio.Converter.Encoding := 'UTF-8';
Rio.HTTPWebNode.InvokeOptions := [soIgnoreInvalidCerts];
Rio.HTTPWebNode.SoapAction:='http://...:8080/Stawiz/WsIncome';
Rio.HTTPWebNode.GetHTTPReqResp.URL:='http://...1:8080/Stawiz/WsIncome';
Rio.HTTPWebNode.GetHTTPReqResp.SoapAction:='http://stawiz.mepsan.com.tr:8080/Stawiz/WsIncome';
Rio.HTTPWebNode.GetHTTPReqResp.UserName:='webservis';
Rio.HTTPWebNode.GetHTTPReqResp.Password:='webservis123.';
Rio.HTTPWebNode.GetHTTPReqResp.InvokeOptions := [soIgnoreInvalidCerts];
Rio.HTTPWebNode.GetHTTPReqResp.Execute(UTF8Encode(Memo1.Text), Stream);
WebServis:=rio as WsIncome;
User := userName.Create;
User.Value := 'webservis';
pass := password.Create;
pass.Value := 'webservis123.';
(Rio as ISOAPHeaders).Send(User);
(Rio as ISOAPHeaders).Send(pass);
str:=WebServis.WsIncome('<SendContact><Transaction>SendSaleList</Transaction><Date>16.09.2021 00:00:00</Date></SendContact>');
Memo1.Lines.Add(str);
end;
bir ayrıntı daha vereyim. httpwebnode1beforepost eventine detaylı araştırmalar sonucu aşağıdaki kodu ekledim. Ama çare olmadı.
procedure TApp.RioHTTPWebNode1BeforePost(const HTTPReqResp: THTTPReqResp;
Data: Pointer);
var
str1: AnsiString;
str2: string;
begin
str1 := 'webservis:webservis123.';
base64.Base64Encode(str1,str1);
str1 := 'Authorization: Basic ' + str1;
str2 := str1;
if not HttpAddRequestHeaders(Data, PChar(str2), Length(str2), HTTP_ADDREQ_FLAG_ADD) then
raise Exception.Create(SysErrorMessage(GetLastError));
end;
Webservisin wsincome metoduna string değeri verdiğim satıra gelince gelir bu windows auth formu. Ayrıca
Rio.HTTPWebNode.GetHTTPReqResp.UserName:='webservis';
Rio.HTTPWebNode.GetHTTPReqResp.Password:='webservis123.';
bu satırları kaldırınca da direk 401 authentication fail alıyorum.
var
WebServis:WsIncome;
str:string;
user, pass : TSimpleHeader;
Stream: TMemoryStream;
StrStream: TStringStream;
begin
Stream := TMemoryStream.Create;
StrStream := Tstringstream.Create(s);
InvRegistry.RegisterHeaderClass(TypeInfo(WsIncome), userName, '...', 'http://...:8080/Stawiz/WsIncome');
InvRegistry.RegisterHeaderClass(TypeInfo(WsIncome), password,'...', 'http://...:8080/Stawiz/WsIncome');
rio.WSDLLocation:='http://...:8080/Stawiz/WsIncome?wsdl';
Rio.URL:='http://...:8080/Stawiz/WsIncome';
rio.Service:='WsIncome';
rio.Port:='BasicHttpBinding_WsIncome';
rio.Converter.Encoding := 'UTF-8';
Rio.HTTPWebNode.InvokeOptions := [soIgnoreInvalidCerts];
Rio.HTTPWebNode.SoapAction:='http://...:8080/Stawiz/WsIncome';
Rio.HTTPWebNode.GetHTTPReqResp.URL:='http://...1:8080/Stawiz/WsIncome';
Rio.HTTPWebNode.GetHTTPReqResp.SoapAction:='http://stawiz.mepsan.com.tr:8080/Stawiz/WsIncome';
Rio.HTTPWebNode.GetHTTPReqResp.UserName:='webservis';
Rio.HTTPWebNode.GetHTTPReqResp.Password:='webservis123.';
Rio.HTTPWebNode.GetHTTPReqResp.InvokeOptions := [soIgnoreInvalidCerts];
Rio.HTTPWebNode.GetHTTPReqResp.Execute(UTF8Encode(Memo1.Text), Stream);
WebServis:=rio as WsIncome;
User := userName.Create;
User.Value := 'webservis';
pass := password.Create;
pass.Value := 'webservis123.';
(Rio as ISOAPHeaders).Send(User);
(Rio as ISOAPHeaders).Send(pass);
str:=WebServis.WsIncome('<SendContact><Transaction>SendSaleList</Transaction><Date>16.09.2021 00:00:00</Date></SendContact>');
Memo1.Lines.Add(str);
end;
bir ayrıntı daha vereyim. httpwebnode1beforepost eventine detaylı araştırmalar sonucu aşağıdaki kodu ekledim. Ama çare olmadı.
procedure TApp.RioHTTPWebNode1BeforePost(const HTTPReqResp: THTTPReqResp;
Data: Pointer);
var
str1: AnsiString;
str2: string;
begin
str1 := 'webservis:webservis123.';
base64.Base64Encode(str1,str1);
str1 := 'Authorization: Basic ' + str1;
str2 := str1;
if not HttpAddRequestHeaders(Data, PChar(str2), Length(str2), HTTP_ADDREQ_FLAG_ADD) then
raise Exception.Create(SysErrorMessage(GetLastError));
end;
Re: Delphi THTTPRIO Spring Security Sorunu
Merhaba,
Web servis detaylı dökümanları olmadan sorunuza direk cevap vermek zor.
Bir test aracı kullanarak çalışan ve kullanıcı adı ve şifre istemeyen bir istek oluşturup kendi gönderdiğiniz ile kıyaslamanız gerekli. Tavsiye olarak SoapUI kullanabilirsiniz.
Sorunsuz bir şekilde SoapUI ile iletişim kurduktan sonra Fiddler Telerik Classic gibi bir araç ile SoapUI iletişim ham verilerini okuyun. Request içindeki ham XML bilgisini bir kenara not edin.
Bundan sonra kendi Delphi uygulamanız ile yapılan iletişim ham verilerini okuyun ve aynı şekilde ham request XML bilgisini kaydedin.
Kaydettiğiniz iki XML arasındaki farkları inceleyerek kod içinde düzeltmeler yaparak ya da RioHTTPWebNode1BeforePost() olayında direk çalışan XML'i elle oluşturarak sorunu çözebiliyor olmalısınız.
Web servis detaylı dökümanları olmadan sorunuza direk cevap vermek zor.
Bir test aracı kullanarak çalışan ve kullanıcı adı ve şifre istemeyen bir istek oluşturup kendi gönderdiğiniz ile kıyaslamanız gerekli. Tavsiye olarak SoapUI kullanabilirsiniz.
Sorunsuz bir şekilde SoapUI ile iletişim kurduktan sonra Fiddler Telerik Classic gibi bir araç ile SoapUI iletişim ham verilerini okuyun. Request içindeki ham XML bilgisini bir kenara not edin.
Bundan sonra kendi Delphi uygulamanız ile yapılan iletişim ham verilerini okuyun ve aynı şekilde ham request XML bilgisini kaydedin.
Kaydettiğiniz iki XML arasındaki farkları inceleyerek kod içinde düzeltmeler yaparak ya da RioHTTPWebNode1BeforePost() olayında direk çalışan XML'i elle oluşturarak sorunu çözebiliyor olmalısınız.
-
- Üye
- Mesajlar: 5
- Kayıt: 26 Kas 2021 06:01
Re: Delphi THTTPRIO Spring Security Sorunu
Döküman olarak verilen sadece
username ve password, HTTP REQUEST HEADERS olarak gönderilmelidir.
Web Servis URL ine Stawiz+ IP Adresi girilmelidir.
SOAP Request
<![CDATA[<SendContact>
<Transaction>SendSaleList</Transaction>
<Date>16.09.2021 00:00:00</Date>
</SendContact>]]>
Bu kadar anladığım kadarıyla bu dökümanı hazırlayan arkadaş ile görüştüm bana WebServis.WsIncome() metodu ile xml veri göndermeniz yeterli demişti. TidHTTP ile bağlantı kurmayı da denedim ama ondan da sonuç alamadım.
username ve password, HTTP REQUEST HEADERS olarak gönderilmelidir.
Web Servis URL ine Stawiz+ IP Adresi girilmelidir.
SOAP Request
<![CDATA[<SendContact>
<Transaction>SendSaleList</Transaction>
<Date>16.09.2021 00:00:00</Date>
</SendContact>]]>
Bu kadar anladığım kadarıyla bu dökümanı hazırlayan arkadaş ile görüştüm bana WebServis.WsIncome() metodu ile xml veri göndermeniz yeterli demişti. TidHTTP ile bağlantı kurmayı da denedim ama ondan da sonuç alamadım.
-
- Üye
- Mesajlar: 5
- Kayıt: 26 Kas 2021 06:01
Re: Delphi THTTPRIO Spring Security Sorunu
SOAPUI ile bağlantı sağladım ancak şöyle bir durum var authorization kısmında No Authorization seçip Headers kısmından kullanıcı adı ve şifre eklersem sorunsuz request veriyor.
Bu durumda ne yapmalıyım kitlendim kaldım?
Bu durumda ne yapmalıyım kitlendim kaldım?
-
- Üye
- Mesajlar: 5
- Kayıt: 26 Kas 2021 06:01
Re: Delphi THTTPRIO Spring Security Sorunu
Arkadaşlar bir şeyden kesinlikle eminim artık SOAPHeader kısmına kullanıcı adı ve şifre bilgisi ekleyebilirsem sorun çözülecek. Kısa yoldan bunun yapabilmem için yardımcı olabilirseniz sevinirim.
Re: Delphi THTTPRIO Spring Security Sorunu
Zaten ilk cevabımda yazmıştım. Hiç bilemiyor iseniz RioHTTPWebNode1BeforePost() olayında direk çalışan XML'i elle oluşturarak sorunu çözebiliyor olmalısınız.serifaliyagci yazdı: ↑29 Kas 2021 04:19 SOAPUI ile bağlantı sağladım ancak şöyle bir durum var authorization kısmında No Authorization seçip Headers kısmından kullanıcı adı ve şifre eklersem sorunsuz request veriyor.
Bu durumda ne yapmalıyım kitlendim kaldım?
İlgili metod içinde gidecek XML'i sıfırdan istediğiniz şekilde düzenleyebilirsiniz.
-
- Üye
- Mesajlar: 5
- Kayıt: 26 Kas 2021 06:01
Re: Delphi THTTPRIO Spring Security Sorunu
Çok teşekkür ederim deniycem.
Re: Delphi THTTPRIO Spring Security Sorunu
SOAPHeader kisminda kullanilabilecek birden fazla yontem var. SOAPUI'a servisi ekleyip kontrol edin, duzgun sekilde yapilandiracaktir. Asagida wsse icin delphi ornegi bulabilirsiniz.
https://github.com/mkysoft/soap-wsse-sample
https://github.com/mkysoft/soap-wsse-sample