Tüm Platformlar için Hızlı Uygulama Geliştirme --->    Kitabımız...      Delphi

Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Access Token alma (çözüldü)
#1
Bir ticari programın rest service Acces Token alma metodu. Bunu Visual Studio da aşağıdaki kod ile yapılıyor. Peki delphi de nasıl yapabiliriz.

Buda videosu :







public string getAccessToken(string url, string userName, string password, string firmNr)
 {
     try
     {
         HttpWebRequest req = WebRequest.Create(new Uri(url)) as HttpWebRequest;
         req.Method = "POST";
         req.ContentType = "application/json";
         req.Accept = "application/json";
         req.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(clientId + ":" + clientSecret)));
         byte[] formData = UTF8Encoding.UTF8.GetBytes("grant_type=password"
             + "&username=" + userName
             + "&firmno=" + firmNr
             + "&password=" + password);
         req.ContentLength = formData.Length;
         using (Stream post = req.GetRequestStream())
         {
             post.Write(formData, 0, formData.Length);
         }
         string result = null;
         using (HttpWebResponse resp = req.GetResponse() as HttpWebResponse)
         {
             StreamReader reader = new StreamReader(resp.GetResponseStream());
             result = reader.ReadToEnd();
         }
         dynamic j = JsonConvert.DeserializeObject(result);
         accessToken = j.access_token;
     }
     catch (Exception){}
  
     return accessToken;
 }
Cevapla
#2
Merhaba,
hangi sürüm delphi kullandığınızı belirtseydiniz daha iyi olurdu.
Eğer 10.1 Belir sürümü var ise Tools>Rest Debugger adımını izeleyerek burada ilgili alanları doldurarak acces token bilgisi elde edebilirsiniz.
Buradan doğru sonuç almanız durumunda ilgili ekranda bulunan "Copy Components" butonu ile Bilgileri çalışma ekranınıza alarak buradan devam edebilirsiniz.
Buradan da ilgili Rest Client Nesnelerini inceleyerek işin nasıl yapıldığını rahatlıkla görebilirsiniz.
Bununla ilgili olarak ....\Samples\Object Pascal\Database\RESTDemo\ klasöründe de örnek bir çalışma yer almaktadır.
İyi Çalışmalar.
Cevapla
#3
Cevap için teşekkür ederim. Xe10.1 kullanıyorum ancak Rest Debugger kullanarak sonuca ulaşamadım. Aslında yapmak istediğim aşağıdaki request’i http kullanarak post yapmak.


POST http:10.9.5.50:32001/api/v1/token
Content-Type: application/json
Accept: application/json
Authorization: Basic 23423842kh34j23g482bdkhfsgfg723
Host: 10.9.5.50:32001
Content-Length: 56
Except: 100-continue
Connection: Keep-Alive

grant_type=password&username=Kullanici&firmno=316&password=
Cevapla
#4
Merhaba;
Tam emin değilim ama dikkatimi çeken nokta videoyu incelediğinizde siz de fark edeceksiniz 7:20 - 7:30dk arasındaki kod girişinde header eklemesi yaparken convert.ToBase64String ile şifreleme yapılıyor.Siz Rest Debugger kullanırken şifrelemeden yaptığınız için problem yaşıyor olabilirsiniz.
İyi Çalışmalar.
Cevapla
#5
aşağıdaki kodu deniyorum ama hata alıyorum.



var
  response : string;
  JSONToSend: TStringStream;
begin
  JSONToSend := TStringStream.Create('{}');
  IdHTTP1.Request.CustomHeaders.Clear;
  IdHTTP1.Request.CharSet     := 'utf-8';
  IdHTTP1.Request.ContentType := 'application/json';
  IdHTTP1.Request.Accept:='application/json';
  IdHTTP1.Request.CustomHeaders.Values['Authorization:'] := 'Basic TfsdfsdfsdfsdfZjQ1E9';
  IdHTTP1.Request.Host:='10.9.5.50:32001';
  IdHTTP1.Request.ContentLength :=55;
  IdHTTP1.Request.CustomHeaders.Values['Except:'] := ' 100-continue';
    IdHTTP1.Request.Connection := 'Keep-Alive';
  IdHTTP1.Request.CustomHeaders.Values['grant_type='] := 'password&username=LOGO&firmno=316&password=';
  response := IdHttp1.Post('http://10.9.5.50:32001/api/v1/token', JSONToSend);


Ek Dosyalar Resimler
   
Cevapla
#6
parametreyi aşağıdaki şekilde verince çalıştı.


var
 IdHTTP: TIdHTTP;
 RBody: TStringstream;
 begin
    IdHTTP := TIdHTTP.Create();
    RBody := TStringstream.Create('grant_type=password&username=LOGO&firmno=317&password=');
Cevapla
#7
Lütfen kodlarınızı (ars=delphi) (ars)  tagları arasında yazınız. Yada cevap editöründe "Delphi Kod Ekle" butonunu kullanarak ekleyin.
Not: Yukarıdaki cevaplarınızı ben düzenledim.
There's no place like 127.0.0.1
WWW
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
Question Access 2016 BY-HAYALET 26 344 6 dakika önce
Son Yorum: KUNTAY
  Datasnap Türkçe karakter sorunu [Çözüldü] hakanharbeli 4 117 11-02-2018, Saat: 03:29
Son Yorum: hakanharbeli
Star ıdHTTP Post hakkında? [Çözüldü] Cyber 1 86 06-02-2018, Saat: 13:36
Son Yorum: Cyber
  Form create h.k (Çözüldü ) cinarbil 12 267 25-01-2018, Saat: 12:09
Son Yorum: cinarbil
  Wsdl Xml Importer(Çözüldü) yhackup 17 222 09-01-2018, Saat: 15:42
Son Yorum: yhackup



Konuyu Okuyanlar: 1 Ziyaretçi