Gegevens: |
Geschreven door: |
marten |
Moeilijkheidsgraad: |
Normaal |
Hits: |
32159 |
|
|
|
|
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
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($ch, CURLOPT_POST, true);
//zet het type op post
curl_setopt($ch, CURLOPT_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> </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($ch, CURLOPT_UPLOAD, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 300);
curl_setopt($ch, CURLE_OPERATION_TIMEOUTED, 300);
curl_setopt($ch, CURLOPT_URL, $dest);
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($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 ;)!
|
|
|