Web Servis e HTTP Header eklemek
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Web Servis e HTTP Header eklemek
Merhaba değerli üyeler ,
bağlantı kurmak istediğim web servis sağlayıcısı ilave olarak HTTP header la bazı bilgiler istemektedir, SOAP Header gönderiyorum XML içinde fakat HTTP header ı nasıl göndereceğimi çözemedim.
İyi çalışmalar.
bağlantı kurmak istediğim web servis sağlayıcısı ilave olarak HTTP header la bazı bilgiler istemektedir, SOAP Header gönderiyorum XML içinde fakat HTTP header ı nasıl göndereceğimi çözemedim.
İyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
Re: Web Servis e HTTP Header eklemek
Farklı protokoller bunlar. Pek anlamadım. İsteği HTPP ile mi gönderiyorsunuz ?
Re: Web Servis e HTTP Header eklemek
Merhaba ,
WSDL Importer ile Interface uniti oluşturarak THTTPRIO ile gönderiyorum , sonuç olarak XML i HTTP REST server a kendi içinde HTTP üzerinde gönderdiği için bir şekilde header da eklenebilir düşüncesindeyim ama nasıl
WSDL Importer ile Interface uniti oluşturarak THTTPRIO ile gönderiyorum , sonuç olarak XML i HTTP REST server a kendi içinde HTTP üzerinde gönderdiği için bir şekilde header da eklenebilir düşüncesindeyim ama nasıl

Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
Re: Web Servis e HTTP Header eklemek
Merhaba.
SOAP çok çalıştım ama sorduğunuz şekilde (ek olarak HTTP header ihtiyacı meselesi) tecrübem olmadı. Umarım aşağıdaki bilgi amaca uygundur.
Google'dan şöyle bir bakımdım. SOAP yanında HTTP header ihtiyacı, authentication için duyulmuş. Örnekler mevcut ve çoğu "Bing Maps" platformuna girerken buna ihtiyaç duymuş.
HTTP headerlar; "HTTP Basic/Digest" stilinde auth. olup oturum açmak amacıyla kullanılırken, SOAP headerlar "WS-Security" stilindeki auth. olup oturum açmakta kullanılıyormuş.
Bu işlem WebNode'un onBeforePost eventinde gerçekleşiyormuş.
bir çok farklı örnek içerisinde sanırım aşağıdaki daha genel kapsamlı bir header imkanı sağlıyor;
USES'a HttpAddRequestHeaders fonksiyonu için "WinInet" eklemeyi unutmayınız
Şeklinde kullanılmış. 
SOAP çok çalıştım ama sorduğunuz şekilde (ek olarak HTTP header ihtiyacı meselesi) tecrübem olmadı. Umarım aşağıdaki bilgi amaca uygundur.
Google'dan şöyle bir bakımdım. SOAP yanında HTTP header ihtiyacı, authentication için duyulmuş. Örnekler mevcut ve çoğu "Bing Maps" platformuna girerken buna ihtiyaç duymuş.
HTTP headerlar; "HTTP Basic/Digest" stilinde auth. olup oturum açmak amacıyla kullanılırken, SOAP headerlar "WS-Security" stilindeki auth. olup oturum açmakta kullanılıyormuş.
Bu işlem WebNode'un onBeforePost eventinde gerçekleşiyormuş.
Kod: Tümünü seç
procedure TForm1.HTTPRIO1HTTPWebNode1BeforePost(const HTTPReqResp: THTTPReqResp;
Data: Pointer);
USES'a HttpAddRequestHeaders fonksiyonu için "WinInet" eklemeyi unutmayınız
Kod: Tümünü seç
const
sCUSTOM_HEADER = 'X-Custom: value';
begin
HttpAddRequestHeaders(Data, PChar(sCUSTOM_HEADER),
Length(sCUSTOM_HEADER), HTTP_ADDREQ_FLAG_ADD);
end;

Re: Web Servis e HTTP Header eklemek
Merhaba @mrmarman,
Öncelikle vakit ayırıp bu detaylı ve değerli bilgiyi paylaştığınız için teşekkür ederim , evet bu yöntemle istediğimiz HTTP Header ı ekleyebildik çok teşekkür ederim.
İyi çalışmalar.
Öncelikle vakit ayırıp bu detaylı ve değerli bilgiyi paylaştığınız için teşekkür ederim , evet bu yöntemle istediğimiz HTTP Header ı ekleyebildik çok teşekkür ederim.
İyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
Re: Web Servis e HTTP Header eklemek
S.a.
Arkadaşlar aşağıdaki web servisten bilgi çekmek istiyorum anca bu web servis konusunda daha başlangıç seviyesinde olduğum için bazı noktaları çözemiyorum yardımcı olursanız sevinirim.
mesela aşağıdaki function GetCurrency: string; stdcall; isimli fonksiyonu çağırmak istiyorum tabi bunun için wsdl'yi import ettim müteakiben formuma bir adet HTTPRIO ekledim amacım şu GetCurrency isimli prosedürü çağırıp sonuçlarını memo text'e almak
Memo.text satırımda [DCC Error] MainForm.pas(39): E2015 Operator not applicable to this operand type şeklinde bir hata alıyorum servisi sunan firma da ilgili fonksiyona açıklama olarak aşağıdaki //Headers: AuthHeader:pIn yazmış ancak tıkantım kaldım. 
// Headers: AuthHeader:pIn
function GetCurrency: string; stdcall;
Arkadaşlar aşağıdaki web servisten bilgi çekmek istiyorum anca bu web servis konusunda daha başlangıç seviyesinde olduğum için bazı noktaları çözemiyorum yardımcı olursanız sevinirim.
mesela aşağıdaki function GetCurrency: string; stdcall; isimli fonksiyonu çağırmak istiyorum tabi bunun için wsdl'yi import ettim müteakiben formuma bir adet HTTPRIO ekledim amacım şu GetCurrency isimli prosedürü çağırıp sonuçlarını memo text'e almak
Kod: Tümünü seç
DovizRIO.HTTPWebNode.UserName:='AltinkaynakWebServis';
DovizRIO.HTTPWebNode.Password:='AltinkaynakWebServis';
[b] Memo.Text:=DovizRIO as DataService.GetDataServiceSoap.GetCurrency[/b];

// Headers: AuthHeader:pIn
function GetCurrency: string; stdcall;
Kod: Tümünü seç
// ************************************************************************ //
// The types declared in this file were generated from data read from the
// WSDL File described below:
// WSDL : http://data.altinkaynak.com/DataService.asmx?WSDL
// >Import : http://data.altinkaynak.com/DataService.asmx?WSDL>0
// Encoding : utf-8
// Version : 1.0
// (27.01.2014 11:28:04 - - $Rev: 37707 $)
// ************************************************************************ //
unit DataService;
interface
uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;
const
IS_OPTN = $0001;
IS_REF = $0080;
type
// ************************************************************************ //
// The following types, referred to in the WSDL document are not being represented
// in this file. They are either aliases[@] of other types represented or were referred
// to but never[!] declared in the document. The types from the latter category
// typically map to predefined/known XML or Embarcadero types; however, they could also
// indicate incorrect WSDL documents that failed to declare or import a schema type.
// ************************************************************************ //
// !:string - "http://www.w3.org/2001/XMLSchema"[Gbl]
AuthHeader2 = class; { "http://data.altinkaynak.com/"[Hdr][GblCplx] }
AuthHeader = class; { "http://data.altinkaynak.com/"[Hdr][GblElm] }
// ************************************************************************ //
// XML : AuthHeader, global, <complexType>
// Namespace : http://data.altinkaynak.com/
// Info : Header
// ************************************************************************ //
AuthHeader2 = class(TSOAPHeader)
private
FUsername: string;
FUsername_Specified: boolean;
FPassword: string;
FPassword_Specified: boolean;
procedure SetUsername(Index: Integer; const Astring: string);
function Username_Specified(Index: Integer): boolean;
procedure SetPassword(Index: Integer; const Astring: string);
function Password_Specified(Index: Integer): boolean;
published
property Username: string Index (IS_OPTN) read FUsername write SetUsername stored Username_Specified;
property Password: string Index (IS_OPTN) read FPassword write SetPassword stored Password_Specified;
end;
// ************************************************************************ //
// XML : AuthHeader, global, <element>
// Namespace : http://data.altinkaynak.com/
// Info : Header
// ************************************************************************ //
AuthHeader = class(AuthHeader2)
private
published
end;
// ************************************************************************ //
// Namespace : http://data.altinkaynak.com/
// soapAction: http://data.altinkaynak.com/%operationName%
// transport : http://schemas.xmlsoap.org/soap/http
// style : document
// use : literal
// binding : DataServiceSoap12
// service : DataService
// port : DataServiceSoap12
// URL : http://data.altinkaynak.com/DataService.asmx
// ************************************************************************ //
DataServiceSoap = interface(IInvokable)
['{9DF8C0DA-A374-87C1-82C1-937930273A0F}']
// Headers: AuthHeader:pIn
function GetCurrency: string; stdcall;
// Headers: AuthHeader:pIn
function GetGold: string; stdcall;
// Headers: AuthHeader:pIn
function GetMain: string; stdcall;
// Headers: AuthHeader:pIn
function GetParity: string; stdcall;
end;
function GetDataServiceSoap(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): DataServiceSoap;
implementation
uses SysUtils;
function GetDataServiceSoap(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): DataServiceSoap;
const
defWSDL = 'http://data.altinkaynak.com/DataService.asmx?WSDL';
defURL = 'http://data.altinkaynak.com/DataService.asmx';
defSvc = 'DataService';
defPrt = 'DataServiceSoap12';
var
RIO: THTTPRIO;
begin
Result := nil;
if (Addr = '') then
begin
if UseWSDL then
Addr := defWSDL
else
Addr := defURL;
end;
if HTTPRIO = nil then
RIO := THTTPRIO.Create(nil)
else
RIO := HTTPRIO;
try
Result := (RIO as DataServiceSoap);
if UseWSDL then
begin
RIO.WSDLLocation := Addr;
RIO.Service := defSvc;
RIO.Port := defPrt;
end else
RIO.URL := Addr;
finally
if (Result = nil) and (HTTPRIO = nil) then
RIO.Free;
end;
end;
procedure AuthHeader2.SetUsername(Index: Integer; const Astring: string);
begin
FUsername := Astring;
FUsername_Specified := True;
end;
function AuthHeader2.Username_Specified(Index: Integer): boolean;
begin
Result := FUsername_Specified;
end;
procedure AuthHeader2.SetPassword(Index: Integer; const Astring: string);
begin
FPassword := Astring;
FPassword_Specified := True;
end;
function AuthHeader2.Password_Specified(Index: Integer): boolean;
begin
Result := FPassword_Specified;
end;
initialization
{ DataServiceSoap }
InvRegistry.RegisterInterface(TypeInfo(DataServiceSoap), 'http://data.altinkaynak.com/', 'utf-8');
InvRegistry.RegisterDefaultSOAPAction(TypeInfo(DataServiceSoap), 'http://data.altinkaynak.com/%operationName%');
InvRegistry.RegisterInvokeOptions(TypeInfo(DataServiceSoap), ioDocument);
InvRegistry.RegisterInvokeOptions(TypeInfo(DataServiceSoap), ioSOAP12);
{ DataServiceSoap.GetCurrency }
InvRegistry.RegisterMethodInfo(TypeInfo(DataServiceSoap), 'GetCurrency', '',
'[ReturnName="GetCurrencyResult"]', IS_OPTN);
InvRegistry.RegisterHeaderClass(TypeInfo(DataServiceSoap), AuthHeader, 'AuthHeader', 'http://data.altinkaynak.com/');
{ DataServiceSoap.GetGold }
InvRegistry.RegisterMethodInfo(TypeInfo(DataServiceSoap), 'GetGold', '',
'[ReturnName="GetGoldResult"]', IS_OPTN);
{ DataServiceSoap.GetMain }
InvRegistry.RegisterMethodInfo(TypeInfo(DataServiceSoap), 'GetMain', '',
'[ReturnName="GetMainResult"]', IS_OPTN);
{ DataServiceSoap.GetParity }
InvRegistry.RegisterMethodInfo(TypeInfo(DataServiceSoap), 'GetParity', '',
'[ReturnName="GetParityResult"]', IS_OPTN);
RemClassRegistry.RegisterXSClass(AuthHeader2, 'http://data.altinkaynak.com/', 'AuthHeader2', 'AuthHeader');
RemClassRegistry.RegisterXSClass(AuthHeader, 'http://data.altinkaynak.com/', 'AuthHeader');
end.
oguthan
Re: Web Servis e HTTP Header eklemek
Kod: Tümünü seç
Memo.Text:=(DovizRIO as DataService.GetDataServiceSoap).GetCurrency;
bazen yükselmek için önce dibi görmek gerekir...
forumda soru sormadan önce bakılmalı bence
daha fazlası için...
yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...
yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Re: Web Servis e HTTP Header eklemek
[DCC Error] MainForm.pas(38): E2015 Operator not applicable to this operand type şeklinde hata alıyorum
oguthan
Re: Web Servis e HTTP Header eklemek
Merhaba ,
standart ta aşağıda ki örnekte olduğu gibi servisi yükleyip altındaki metodları çalıştırabilirsiniz.
standart ta aşağıda ki örnekte olduğu gibi servisi yükleyip altındaki metodları çalıştırabilirsiniz.
Kod: Tümünü seç
procedure Test ;
var
intServis : DataServiceSoap ;
begin
intServis := GetDataServiceSoap(False , '' , DovizRIO);
ShowMessage( intServis.GetCurrency );
end;
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
Re: Web Servis e HTTP Header eklemek
hocam kusura bakmayın başınızı ağrıttım. denedim ancak bu defa da Object referance not set an instance of an object hatası aldım.
amacım http://www.altinkaynak.com/Servisler adresindeki
Kullanıcı adı : AltinkaynakWebServis ve Şifresi : AltinkaynakWebServis olan http://data.altinkaynak.com/DataService.asmx servisinden anlık döviz kurları bilgisini almak ancak bit türlü gördüğünüz üzere yapamadım
ilginiz içinde ayrıca teşekkür ederim.
Bu kullanıcıya GetCurrency, GetGold ve GetMain servisleri açık olup GetParity servisi kapalıdır.
amacım http://www.altinkaynak.com/Servisler adresindeki
Kullanıcı adı : AltinkaynakWebServis ve Şifresi : AltinkaynakWebServis olan http://data.altinkaynak.com/DataService.asmx servisinden anlık döviz kurları bilgisini almak ancak bit türlü gördüğünüz üzere yapamadım

Bu kullanıcıya GetCurrency, GetGold ve GetMain servisleri açık olup GetParity servisi kapalıdır.
oguthan
Re: Web Servis e HTTP Header eklemek
Merhabalar ,
Kusura bakmayın biraz dikkatli bakınca kullanıcı otantikasyonunun Basic değil, SOAP Header ile yapıldığını fark ettim kodu şöyle düzenlerseniz sorun olmaz.
uses a InvokeRegistry eklemeyi unutmayın , kodu özetleyecek olursak ;
WSDL importer ile oluşturduğunuz unit içinde tanımlı TSOAPHeader dan türetilmiş "AuthHeader" nesnesi ni oluşturup dolduruyoruz , sonra bu HEADER ı servis talebinden önce SOAP mesajına ekliyoruz. son olarak servisi çağırıyoruz.
İyi çalışmalar.
Kusura bakmayın biraz dikkatli bakınca kullanıcı otantikasyonunun Basic değil, SOAP Header ile yapıldığını fark ettim kodu şöyle düzenlerseniz sorun olmaz.
Kod: Tümünü seç
procedure Test;
var
intService : DataServiceSoap ;
intUser : AuthHeader;
begin
intUser := AuthHeader.Create ;
intUser.Username := 'AltinkaynakWebServis';
intUser.Password := 'AltinkaynakWebServis';
intService := GetDataServiceSoap;
(intService as ISOAPHeaders).Send( intUser );
ShowMessage( intService.GetCurrency );
end;
WSDL importer ile oluşturduğunuz unit içinde tanımlı TSOAPHeader dan türetilmiş "AuthHeader" nesnesi ni oluşturup dolduruyoruz , sonra bu HEADER ı servis talebinden önce SOAP mesajına ekliyoruz. son olarak servisi çağırıyoruz.
İyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
Re: Web Servis e HTTP Header eklemek
Hocam öncellikle geri dönüşleriniz için teşekkür ederim. rahatsızlığım nedeni ile deneyemedim. birazdan deneip sonuçları sizinle paylaşacağım. çok teşekkür ederim.
oguthan
Re: Web Servis e HTTP Header eklemek
hocam çok teşekkür ederim. düzgün bir biçimde çalışıyor.
oguthan
Re: Web Servis e HTTP Header eklemek
Rica ederim iyi çalışmalar.oguthan yazdı:hocam çok teşekkür ederim. düzgün bir biçimde çalışıyor.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
-
- Üye
- Mesajlar: 1
- Kayıt: 25 Kas 2014 04:17
Re: Web Servis e HTTP Header eklemek
Volkan bey meraba.
WDSL Importer ile uniti oluşturdum. buton clik üzerine test kısmındaki kodları yazdım. tıkladığımda gelen mesaj "Value cannot be null. Paremeter name : username" şeklinde dönüyor. bu konuda acemiyim. Yardımcı olursanız sevinirim.
WDSL Importer ile uniti oluşturdum. buton clik üzerine test kısmındaki kodları yazdım. tıkladığımda gelen mesaj "Value cannot be null. Paremeter name : username" şeklinde dönüyor. bu konuda acemiyim. Yardımcı olursanız sevinirim.