[Çözüldü] NetHttpclient ile api kullanımı

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Lord_Ares
Üye
Mesajlar: 1022
Kayıt: 15 Eki 2006 03:33
Konum: Çorlu

[Çözüldü] NetHttpclient ile api kullanımı

Mesaj gönderen Lord_Ares » 03 Oca 2018 11:44

Merhaba, bir sitenin vermiş olduğu apiyi kullanarak siteden veri çekmeye çalışıyorum. Site bana api key ve secret code veriyor.
Api kullanmayı ilk defa öğreniyorum. Arkadaşlarımızdan biri bana nasıl kullanacağımı göstermek adına sağolsun şöyle bir kod paylaştı.

Kod: Tümünü seç

var 
  HTTP: TIdHTTP;
  Parameters: TStringList;
  Rsp: String;
begin
  HTTP := TIdHTTP.Create;
  Parameters := TStringList.Create;
  try
    HTTP.Request.CustomHeaders.Values['Key'] := 'ECE75WZB-C1CSXXXX-H07XXXXX-QNXXXXXX';
    HTTP.Request.CustomHeaders.Values['Sign'] := '8148114a3923cf6241a101ef24bd942e01318487d93ec53b18550350eeaa15';
 
    Parameters.Add('nonce=1');
    Parameters.Add('command=returnBalances');
 
    Rsp := HTTP.Post('https://poloniex.com/tradingApi', Parameters);   
  finally
    HTTP.Free;
    Parameters.Free;
  end;

Bu kod ile deneyerek öğrenmek istedim fakat projemi çalıştırdığımda "could not load ssl library" aldım. Gerekli dll dosyalarını proje klasörüne koyarak denesemde sonuç değişmedi.

Farklı bir çözüm olarak TNetHttpClient kullanın dediler. Bende aşağıdaki şekilde denedim. Bu seferde gönderdiğim api keyin geçersiz olduğu iletisini aldım. Kontrol ettiğimde api keyin doğru olduğunu görüyorum fakat Siteden dönen hata {"error":"Invalid API key\/secret pair."}
Acaba siteye login olmadan denediğim için mi bu hatayı alıyorum ? Nasıl yapmalıyım yol gösterirmisiniz , bu işin mantığı nedir ?

Api destek sayfası https://poloniex.com/support/api/

Kod: Tümünü seç

var
  Parameters: TStringList;
 Rsp: String;
begin
 
 
 Parameters := TStringList.Create;
 try
   NetHTTPClient1.CustomHeaders['Key'] := 'xxxxxxxx';
   NetHTTPClient1.CustomHeaders['Sign'] := 'xxx';
   Parameters.Add('nonce=1');
   Parameters.Add('command=returnBalances');
   Rsp := NetHTTPClient1.Post('https://poloniex.com/tradingApi', Parameters).ContentAsString;
 finally
   NetHTTPClient1.Free;
   Parameters.Free;
   Memo1.Text:=Rsp;
 end;
end;


En son Lord_Ares tarafından 09 Oca 2018 02:16 tarihinde düzenlendi, toplamda 2 kere düzenlendi.

ertank
Üye
Mesajlar: 1161
Kayıt: 11 Eyl 2015 11:45

Re: netHttpclient ile api kullanımı

Mesaj gönderen ertank » 04 Oca 2018 01:08

Merhaba,

TIdHTTP ile denediğim zaman "HTTP/1.1 403 Forbidden" hata mesajını alıyorum. Acaba kullandığınız dll dosyaları farklı bit seviyesine veya TIdHTTP tarafından desteklenmeyen bir sürüme ait olabilir mi? Aşağıdaki bağlantıda paylaştığım DLL dosyalarını kullandım test ederken.
viewtopic.php?f=2&t=37137#p199891

Bahsettiğiniz hata mesajının bir olası sebebi yeni OpenSSL DLL dosyalarını eski Indy sürümü ile kullanıyor olmanız olabilir. Benim Indy sürümüm 10.6.2.5366 eğer yanlış hatırlamıyor ise Delphi 10.2.2 ile birlikte gelen sürüm olması gerekli.

Eğer Indy 9 sürümlerinden bir tanesini kullanıyor iseniz bu sürümler için Indy kendi gereksinimlerine göre modifiye edilmiş OpenSSL DLL dosyaları kullanıyor. Bu durumda tavsiyem Indy 10 sürümüne geçip standart OpenSSL DLL dosyalarını kullanabilir hale gelmeniz olacaktır. Yeni sürüme yükseltir iken Library Search Path içindeki eski Indy9 sürümüne ait dizinleri kaldırmayı ihmal etmeyin. Aksi takdirde yine benzer hata almanız yüksek ihtimal olur. En güzeli eski kütüphane dizinlerini silmek olacaktır.

Eğer yeni sürüme yükseltme imkanınız yok ise Indy 9 için uyumlu DLL dosyalarını aşağıdaki bağlantıdan indirmeniz mümkün.
https://indy.fulgan.com/SSL/Archive/

Lord_Ares
Üye
Mesajlar: 1022
Kayıt: 15 Eki 2006 03:33
Konum: Çorlu

Re: netHttpclient ile api kullanımı

Mesaj gönderen Lord_Ares » 04 Oca 2018 09:41

windows 8 de Delphi xe10.1 sürümü optionstan gördüğüm kadarıyla indiy 10 sürümünü kullanıyorum. Verdiğiniz her iki dosyalarıda denedim ama sonuç aynı. Sanırıım gözden birşey kaçırıyorum ama ne :)))

ertank
Üye
Mesajlar: 1161
Kayıt: 11 Eyl 2015 11:45

Re: netHttpclient ile api kullanımı

Mesaj gönderen ertank » 04 Oca 2018 11:54

Library Search Path kısmını inceleyin Delphi 10.1 içinde. Bir olasılık sisteminizdeki eski Indy sürümü dizinini görüyor ise (sisteminizde Delphi 7 veya daha eski sürüm yüklü ise) derlemeyi eski DCU dosyalarını kullanarak yapıyor olabilir.

Test ederken DLL dosyalarını derlenmiş EXE ile aynı dizine koyup derlenmiş EXE dosyasını Windows içinden ayrıca çalıştırmayı deneyin. Sisteminizde farklı OpenSSL dll dosyaları var ise belki Delphi debug mod ile çalıştığında eski sürümleri görüyor olabilir. Windows DLL dosyası yükler iken öncelikle çalıştırılma dizinine, ardından EXE dosyası dizinine bakar.

Kendi sisteminizdeki bütün OpenSSL dll dosyalarını bulup farklı olan var mı incelemenizde fayda var. Bu iş için aşağıdaki ücretsiz aracı tavsiye ederim. Çok hızlıdır.

Kod: Tümünü seç

http://www.voidtools.com/

Lord_Ares
Üye
Mesajlar: 1022
Kayıt: 15 Eki 2006 03:33
Konum: Çorlu

Re: netHttpclient ile api kullanımı

Mesaj gönderen Lord_Ares » 04 Oca 2018 10:46

Desteğiniz için çok teşekkürler sanırım çözüm bulamayacağım. Dediklerinizi harfiyen yapıp test ettim fakat değişmedi. Delphi bazen böyle şeyler ile ümitlerimi yıkıyor...

ertank
Üye
Mesajlar: 1161
Kayıt: 11 Eyl 2015 11:45

Re: netHttpclient ile api kullanımı

Mesaj gönderen ertank » 05 Oca 2018 04:51

Sorunu biraz daha araştırınca Cookie sebepli sorun yaşama ihtimaliniz de olabilir. Delphi 10.1 ve Indy ile cookie sebepli yaşanan sorunlar mevcut. Bunun dışında Delphi 10.1 update 1 içinde düzeltilen bir hata var:

Kod: Tümünü seç

RSP-14712, HttpClient.post badly urlencode plus character, RTL, RTL\Delphi
Eğer halen 10.1 kullanıyor iseniz ve update 1 hata düzeltmeleri içeren sürümü yüklemedi iseniz özellikle bu hata ile ilgili güncellemenizi öneririm.

Ayrıca; https://github.com/IndySockets/Indy/issues/182

Yukarıdaki bilgiler ve benim sistemimde çalışması sebebiyle sisteminizdeki Indy sürümünü en azından 10.6.2.5366 veya daha yeni bir hale getirip yeniden denemenizi şiddetle tavsiye ediyorum. Eski bileşenleri Component->Install Packages ekranında sadece yüklenmesini iptal ederek kaldırın sisteminizden. Böylece geri dönmesi daha kolay olur. Ancak geri dönmek isteyeceğinizi düşünmüyorum.

Kurulum notları: http://www.indyproject.org/Sockets/Docs ... on.EN.aspx
Şu an itibariyle en son sürüm kaynak kod indirme bağlantısı: https://indy.fulgan.com/ZIP/Indy10_5438.zip

Cevapla