1 Son düzenleyen, Mehmet K (13.01.2010 21:41:58)

Konu: cURL

Merhaba

fox4um 'da gezerken, farkina vardımki, cURL hakkında hiç birileri birşey yazmamış.
Bende geçmişde wininet.dll kullanırdım; taki birgün https adresli bir siteden bir dosya indirmek zorunda kalmışdım.
Bir süre sonra pes ettim. Sanırım wininet https protokolu desteklemiyor.
Araştırma sonucu cURL'u 'buldum'.  Daha evvelde hep önünden geçmişdim, ama daha çok C/C++ için sanarak çok kurcalamamışdım. Çaresizliğimde biraz daha detaylı bakmak zorunda kaldım. Evet, VFP ile kullanmak mümkün. Biraz zor, ama mümkün.
Çok detaylı olduğu için, sizi bu bilgilerle baymak istemiyorum.
Ama ...
FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, FILE, LDAP ve LDAPS, sertifikalı HTTPS,  HTTP POST, HTTP PUT, FTP uploading size lazım olursa: bilinizki cURL bunların hepsini (ücretsiz) destekliyor.

http://curl.haxx.se/
http://www.ctl32.com.ar/libcurl.asp (şu an cevap vermiyor *)
http://www.foxite.com/archives/libcurl- … 195910.htm

* site tamami olarak kapandıysa, ordakı bilgiler bende var ve isteyene eposta yolu ile iletebilirim

Bir projenin bitmesi için 3 seçenek vardır: hızlı, ucuz, iyi. Bu seçeneklerden iki tanesini seçiniz.

2

Re: cURL

Merhaba Mehmet;

Carlos Alloattinin Ctl32 library sinden bende bir kaç class kullanıyorum, gerçekten kullanışlı ve kullanımı kolay. Hatta kendi projeme dahil ettiğim ilk hazır class Carlos 'un ctl32 'i diyebilirim.

Daha önce cURL kullanmadım, ihtiyaç duymadım şu ana dek, ama yakın zamanda FTP ve HTTP üzerinden yapmayı planladığım bir kaç iş var, yazdığın bu notları değerlendiricem.

Eğer mümkünse, yaptığın işlerden basitçe bir kaç örnekleme yapman mümkün mü?

Zaman ayırdığın ve paylaştığın için çok teşekkürler smile

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

3

Re: cURL

Merhaba Uğur

Örnek olarak kullanıcının programı güncelleme fonksiyonu vereyim sana:

Visual Fox Pro
LOCAL cURL, nResult

 
IF FILE("Temp\xxx_update.exe")
  DELETE FILE Temp\xxx_update.EXE
ENDIF
 
cURL = "http://www.xxx-yyy.com.tr/downloads/xxx/"
IF !DIRECTORY("Temp",1)
  MKDIR "Temp"
ENDIF
 
 
THISFORM.oCurl.CurlEasyReset()
THISFORM.oCurl.LogFileReset()
THISFORM.oCurl.CurlOptVerbose = .T.
THISFORM.oCurl.CurlOptProgress = .T.
THISFORM.oCurl.CurlOptProgress = .T.
nResult = THISFORM.oCurl.HttpDownloadFile(cUrl + "xxx_update.afg", "Temp\xxx_update.exe")
THISFORM.oCurl.oProgress.HIDE()
 
IF nResult == 0
  DECLARE INTEGER WinExec IN kernel32 STRING cmd,INTEGER parm
  =WinExec("Temp\xxx_update.exe",1)
  THISFORM.cmdExit.CLICK()
ENDIF

Bu fonksiyon afg uzantılı bir dosyayı exe olarak kayıt ediyor ve sonra çalıştırıyor.
afg uzantının nedeni: bazı anti virus programlar exe indirmeyi izin vemiyor.

Asıl püf nokta ama oCurl.TrasferProgress methodunda. Bu method her saniyede bir call ediliyor. Ve orda ne yaparsan yap, sana bırakılmış. Ben orda  bir progressbar gösteriyorum ve downloadun gidişadı hakkında bilgi veriyor.

Visual Fox Pro
*!* TransferProgress

*!* Use this event to show the progress of the operation.
LPARAMETERS pnBytesTotal, pnBytesDone, pnBytesLeft, pnSpeed, pnTimeTotal, pnTimeDone, pnTimeLeft
 
IF pnBytesTotal == 0
  RETURN
ENDIF
 
IF TYPE("this.oProgress") != "O"
  THIS.oProgress = CREATEOBJECT("Progress_bar", "0 kbps")
  THIS.oProgress.SHOW()
ENDIF
 
 
 
WITH THIS.oProgress
  IF .ole.MAX == 1
    .ole.MIN   = 0
    .ole.MAX   = pnBytesTotal +1
    .ole.VALUE = 0
  ELSE
    .ole.VALUE = pnBytesDone
    .lblBemerkung.CAPTION = STR(INT((pnSpeed/1000)),4) + " kbps / " + ALLTRIM(STR(pnTimeLeft)) + " san."
    .center_label()
  ENDIF
ENDWITH

Umarim işini görür.

Bir projenin bitmesi için 3 seçenek vardır: hızlı, ucuz, iyi. Bu seçeneklerden iki tanesini seçiniz.

4

Re: cURL

Mehmet; bu kısacık kod işimi görmekten fazlasını yapıcak smile

Sadece benim değil forumdaki bir çok arkadaşın işine yarıyacağını düşünüyorum.

Ayrıca "AFG" oyunu gerçekten iyi düşünce smile

Ellerine sağlık ...

Çok teşekkürler smile

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

5

Re: cURL

Merhaba Mehmet,
oncelikle cUrl den haberdar ettigin icin sagol
http://curl.haxx.se/latest.cgi?curl=win … devel-msvc adresinden ilgili dosyalari indirdim

kod parcalarini verdigin uygulama "Check For Update" yada "Auto Update" tarzi isler icin bicilmis kaftan gibi gozukuyor smile
calisir bir ornegini koyabilirsen test etme sansimiz olur.

6 Son düzenleyen, Mehmet K (15.01.2010 14:51:20)

Re: cURL

Vereceğim kod test edilmiş ve standalone çalışıyor. İlk başta belirtiğim gibi: cURL kurmak çok basıt değil.  Ama bir kes "aha!" dedikten sonra, asla birdaha vazgeçilmez programlardan biri.

Program Merkez bankasından bugünkü kurları indiriyor.

Visual Fox Pro
#DEFINE TRUE .T.

#DEFINE FALSE .F.
 
LOCAL oCurl
IF !InitCurl()
  RETURN
ENDIF
oCurl = CREATEOBJECT("LibCurl")
Example(oCurl)
 
****************************************
* InitCurl
****************************************
FUNCTION InitCurl()
  LOCAL cRegistry, cDir, cUtility
 
  SET CLASSLIB TO Libs\libcurl ADDITIVE
  SET LIBRARY TO Libs\vfp2c32.fll ADDITIVE
  SET PROCEDURE TO progs\libcurl, progs\vfp2c32 ADDITIVE
 
  *  SetEnvironment()
 
  *!* since libcurl.dll cannot find its supporting dlls if they are not in the Windows path,
  *!* even if they are in the same folder as libcurl.dll, let's just load them here then.
  LoadDll("libs\libeay32.dll")
  LoadDll("libs\libssl32.dll")
 
  IF !InitVFP2C32(0xFFFFFFFF)
    DEBUGOUT "InitVFP2C32 FAILED!"
    RETURN FALSE
  ENDIF
  RETURN TRUE
ENDFUNC
 
****************************************
* Example
****************************************
FUNCTION Example( oCurl )
  LOCAL cURL, nResult
 
 
  cURL = "http://www.tcmb.gov.tr/kurlar/201001/14012010.html"
 
  oCurl.CurlEasyReset()
  oCurl.LogFileReset()
  oCurl.CurlOptVerbose = .T.
  oCurl.CurlOptProgress = .F.  && oCurl.TrasferProgress aktiv olunca, bu .T. olmasi lazim
  nResult = oCurl.HttpDownloadFile(cUrl, "C:\kurlar.html")
//  oCurl.oProgress.HIDE()
ENDFUNC

Not: libCurl sınıfı ve libCur programı projenize eklemeniz lazım. Bunlar bende LIBS ve PROGS klasörün altında

Bir projenin bitmesi için 3 seçenek vardır: hızlı, ucuz, iyi. Bu seçeneklerden iki tanesini seçiniz.