login  Naam:   Wachtwoord: 
Registreer je!
 Tutorials

Tutorials > PHP


Gegevens:
Geschreven door:
marten
Moeilijkheidsgraad:
Normaal
Hits:
31944
Punten:
Aantal punten:
 (3.11)
Aantal stemmen:
9
Stem:
Niet ingelogd
Nota's:
 Lees de nota's (9)
 

Tutorial:

CURL nader verklaard

Inleiding
Waarschuwing!
Wat is CURL
Het gebruik van CURL
Overzicht opties
Voorbeeld 1: Een formulier
Voorbeeld 2: Uploaden
Conclusie


Inleiding

CURL is een techniek die gemaakt is om de tijd tussen de server en de client te verminderen. Daarom word deze ook vaak in verband gebracht met de techniek AJAX. maar het verschil is waar de techniek draait. AJAX draait namelijk client side en CURL server side. Ik hoop in deze tutorial een klein beetje helderheid te verschaffen met wat er mogelijk is met CURL en zal een tweetal voorbeelden geven. Verder staan er enkele tips in die van www.php.net zijn gehaald.
 
 top

Waarschuwing!

De techniek van deze tutorial kan gebruikt worden voor illegale handelingen. De schrijver en de site waar het geplaatst is zijn niet verantwoordelijk voor deze zaken en gaan er vanuit dat deze techniek niet misbruikt word!
 
 top

Wat is CURL?

Zoals in de inleiding al is gezegd is CURL een techniek die de tijd tussen de server en de client wil verkleinen. Curl is een soort techniek dat gebruikt kan maken van FTP, FTPS, HTTP, HTTPS, Gopher, Telnet, DICT, FILE and LDAP. Verder ondersteunt CURL de mogelijkheden HTTPS certificaten, HTTP POST, HTTP PUT, FTP uploading, Kerberos, HTTP form-based upload, proxies, cookies, user+password authentication, file transfer resume, http proxy tunneling en nog veel meer technieken. CURL, eigenlijk cURL is open source.
 
 top

Het gebruik van CURL

cURL bestaat uit een aantal standaard functies. Hiermee word het meeste gedaan. Ik zal hieronder de standaard functies uitleggen. Wanneer je op de functie klikt kom je bij de php.net uitleg
 
  • curl_init - Hierin kan je de link die je wilt openen definieren.
  • curl_exec - Voer de eerder gedefinieerde actie uit en print het resultaat op het scherm
  • curl_close - Sluit de link met de site.
  • curl_copy_handle - Kopieer een cURL handle met al zijn opties.
  • curl_errno - Geeft de laatste error nummer terug.
  • curl_error - Geeft een string terug met de laatste error van een cURL sessie.
  • curl_getinfo - Geeft info over een specifieke transfer.
  • curl_multi_add_handle - Voeg een normale Curl handle toe aan een multi handle
  • curl_multi_close - Sluit meerdere curl handles.
  • curl_multi_exec - Voer de subacties uit van de huidige curl sessie.
  • curl_multi_getcontent - Geeft de content van een curl handle terug als CURLOPT_RETURNTRANSFER gebruikt word.
  • curl_multi_info_read - Geeft informatie over de huidige transfers.
  • curl_multi_init - Geeft een nieuwe multi-handle terug.
  • curl_multi_remove_handle - Verwijderd een multi-handle uit de CURL handles.
  • curl_multi_select - Selecteer alle Sockets om te gebruiken
  • curl_version - Geeft het huidige curl versienummer terug
  • curl_setopt - Hiermee kan je opties toevoegen aan de curl-sessie. Zie het opties overzicht
  •  
    Voor 'algemene' zijn vooral curl_init(), curl_exec(), curl_close() en curl_setopt() belangrijk. Voorbeelden van deze functies kunt u vinden in de voorbeelden die volgen. Om de curl sessie volledig aan je wensen aan te passen is curl_setopt erg makkelijk. In het volgende paragraafje vind u een overzicht van de belangrijkste opties en een link naar het volledige overzicht van de opties die mogelijk zijn.
     
     top

    Overzicht opties

    Met de functie curl_setopt() kan je de curl sessie vele functies meegeven. Bijvoorbeeld op welke methode de server de data moet interpreteren, of de inhoud van de sessie steeds refreshed moet worden en functies om een SSL connectie te controleren.
    De functies die belangrijk zijn om een sessie door te geven zijn:
  • CURLOPT_POST -- Door het commando curl_opt(CURLOPT_POST, 1) te gebruiken kan de server zien dat de methode POST is.
  • CURLOPT_HTTPGET -- Door het commando curl_opt(CURLOPT_HTTPGET, 1) zet je de methode op GET.
  • CURLOPT_PUT -- Door het commando curl_opt(CURLOPT_PUT, 1) zet je de methode op PUT. Hiermee kan je files uploaden.
  • Hiermee kan je dus verschillende methoden aangeven hoe de server je sessie moet interpreteren. Verder zijn er onder andere opties voor een HTTP-tunnel en bijvoorbeeld een PROXY server voor handen.
     
    Verder wil ik de volgende opties laten zien:
  • CURLOPT_RETURNTRANSFER -- Door deze optie te gebruiken kan je de uitvoer van curl_exec in een variabele zetten ipv op het scherm te tonen.
  • CURLOPT_FRESH_CONNECT -- Door dit commando geef je aan dat de sessie vernieuwd moet worden en niet uit de cache gehaald moet worden.
  • CURLOPT_UPLOAD -- Bereid met dit commando CURL voor om een file te uploaden.
  • CURLOPT_CONNECTTIMEOUT -- Hiermee kan je de timeout aangeven voor een request. Dus na x aantal seconden kan ie opnieuw proberen.
  • CURLOPT_PORT -- Geef een poort mee aan de connectie / sessie.
  • CURLOPT_PROXYAUTH -- Geef de authorisatie methode mee met het connecten.
  • CURLOPT_PROXYPORT -- Geef de proxypoort mee. Deze kan je ook meegeven met CURLOPT_PORT.
  • Voor een volledig overzicht wil ik u graag verwijzen naar het overzicht van php.net "Volledig overzicht"
     top

    Voorbeeld 1: Een formulier

    Oke genoeg overzichten en lijstjes. We willen een voorbeeld hoor ik u zeggen :).Ik zal in de komende paragrafen twee voorbeelden geven hoe je curl nou kan gebruiken. Ik zal eerst aangeven hoe je een formulier kunt versturen. Dit kan erg handig zijn om vanaf je eigen site in te loggen op een andere site. PAS OP! Kijk eerst of dit mag! Anders moet je dit niet doen!
    Stel we hebben een inlogformulier. Deze willen we controleren door een externe url. We krijgen eerst de welbekende code:
     
    <?php
                    
    //controleer of het formulier gesubmit is. Als dat zo is stuur de data door naar de link
                    
                    
    if(isSet($_POST['submit']))
                        {
                            
    $ch curl_init("hier je externe url"); 
                            
    //definieer de link
                            
                            
    curl_setopt($chCURLOPT_POSTtrue);
                             
    //zet het type op post
                            
                            
    curl_setopt($chCURLOPT_POSTFIELDS"AccountId=" .$account."&pass=".$pass.""); 
                            
    //stuur de gegevens uit het formulier door naar de link
                                                    
                            
    curl_exec($ch); 
                            
    //Zet de output op het scherm
                            
                            
    if (curl_errno($ch)) 
                                {
                                       print 
    curl_error($ch);
                                       
    //Als er een fout is geef deze dan
                                
    }
                            else
                                {
                                    
    curl_close($ch); 
                                    
    //Sluit de link met de website
                                
    }
                            
                        }
                    else
                        {
                    
    ?>
            <form method="POST" action="<? echo $_SERVER['PHP_SELF'];  ?>" name="login">
                <table width="100%">
                    <tr align="center">
                        <td width="50%" align="right"><font color="navy">Account ID</font></td>
                        <td width="50%" align="left"><input type="text" name="account" size="10"></td>
                    </tr>
                    
                    <tr align="center">
                        <td width="50%" align="right" width="100"><font color="navy">Password</font></td>
                        <td width="50%" align="left"><input type="password" size="10" name="pass"></td>
                    </tr>
                    <tr>
                        <td>&nbsp;</td>
                    </tr>
                    <tr align="center">
                        <td colspan="2" align="center"><input name="submit" type="submit" value="Inloggen"></td>
                    </tr>
                
                </table>
                </form>
                <? ?>
    We kijken hier dus of het formulier gesubmitted is of niet. Als dit zo is maken we verbinding met de site / url. Vervolgens geven we aan dat het met POST moet en sturen we de waardes door. Let op het scheiden van de waardes. Dit gebeurt met een ampresant. Vervolgens printen we het hele geheel op het scherm en kijken we of er fouten waren. Als deze er waren dan geven we die weer en anders sluiten we de verbinding weer. Als je vragen hebt over deze tutorial kan je me een bericht sturen.
     top

    Voorbeeld 2: Een file uploaden

    Dit voorbeeld komt van de php.net site af.
     
    <?php
    function curl_upload($src) {
       
    $fn basename($src);
       
    $dest "ftp://user:passwd@server.com/incoming/$fn";
       
    $ch curl_init();
      
       
    $fp fopen($src,"r");
       
    curl_setopt($chCURLOPT_UPLOAD1);
       
    curl_setopt($chCURLOPT_TIMEOUT300);
       
    curl_setopt($chCURLE_OPERATION_TIMEOUTED300);
       
    curl_setopt($chCURLOPT_URL$dest);
       
    curl_setopt($chCURLOPT_INFILE$fp);
       
    curl_setopt($chCURLOPT_INFILESIZEfilesize($src));
       
    curl_exec($ch);
       
    fclose ($fp);
       
    $errorMsg '';
       
    $errorMsg curl_error($ch);
       
    $errorNumber curl_errno($ch);
       
    curl_close($ch);
       return 
    $errorNumber;
    }
    ?>
    Dit voorbeeld is een functie om een file te uploaden dmv een ftp server en werkt alleen met een php versie van 4.3.9 of hoger en een win32 server.
     top

    Conclusie

    Ik hoop dat het allemaal wat duidelijker is. Als je vragen hebt kan je ze mij altijd stellen.
    Veel plezier met deze techniek en niet misbruiken he ;)!


    « Vorige tutorial : Zip bestanden Volgende tutorial : Technieken, tricks en tips »

    © 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.01s