Pokročilý cURL wrapper usnadňují práci s cURL
| Download | http://github.com/HosipLan/cURL-wrapper |
|---|---|
| Forum thread | http://forum.nettephp.com/…curl-wrapper |
| Autor | Filip Procházka |
| Homepage | http://curl.kdyby.org/ |
Doplněk nepotřebuje žádnou instalaci, stačí jen rozbalit soubory ze
složky libs z balíčku ke své aplikaci a naincludovat.
V případě použítí RobotLoaderu se třídy includují automaticky.
Wrapper umožňuje nastavení výchozích hodnot do vašeho configu, jako například výchozí hlavičky, složku pro cookies, cestu pro ukládání stažených souborů, nebo třeba protokol pro thread-safe ukládání Nette\IO\SafeStream
[common]
curl.cookieFile = %appDir%/temp/cookies.tmp
curl.downloadFolder = %appDir%/download
curl.followRedirects = True
curl.fileProtocol = safe
curl.userAgent = "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.15) Gecko/2009102814 Firefox/3.0.15"
curl.headers.HTTP_ACCEPT = "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"
curl.headers.HTTP_ACCEPT_LANGUAGE = "cs,en-us;q=0.7,en;q=0.3"
curl.headers.HTTP_ACCEPT_ENCODING = "gzip,deflate"
curl.headers.HTTP_ACCEPT_CHARSET = "windows-1250,utf-8;q=0.7,*;q=0.7"
curl.headers.HTTP_KEEP_ALIVE = 300
curl.headers.HTTP_CONNECTION = "keep-alive"
Inicializaci a jednoduchou žádost lze provést více způsoby, pokaždé však třída vrací objekt CurlResponse nebo v případě chyby vyhodí vyjímku CurlException
// první způsob
$test1 = new Curl;
try {
$odpoved = $test1->get("http://curl.kdyby.org/prevodnik.asm.zdrojak");
echo $odpoved->getBody();
var_dump($odpoved->getHeaders()); // vrací pole hlaviček
} catch ( CurlException $e ){
echo $e->getMessage();
}
// druhý způsob
$test2 = new Curl("http://curl.kdyby.org/prevodnik.asm.zdrojak");
try {
$odpoved = $test2->get();
echo $odpoved->getBody();
var_dump($odpoved->getHeaders()); // vrací pole hlaviček
} catch ( CurlException $e ){
echo $e->getMessage();
}
Pokud specifikujete URL už v konstruktoru, bude wrapper
ignorovat parametr url ve všech ostatních funkcích, tento parametr se potom
vynechává při jejich volání. Místo $curl->get($url,
$query) se volá jen $curl->get($query) pro resetování
nebo nastavení jiné url se v tomto případě
používá $curl->setUrl($url)
V balíčku jsou přibalené tři jednoduché testy, první je zjednodušeně předveden v ukázce inicializace, druhý je poslání POST požadavku
$test = new Curl("http://curl.kdyby.org/dump_post.php");
try {
$odpoved = $test->post(array(
'var1' => 'Lorem ipsum dot sit amet',
'var2' => 0,
'var3' => 23,
'var4' => True,
'var5' => False,
));
echo $odpoved->getBody();
var_dump($odpoved->getHeaders()); // vrací pole hlaviček
} catch ( CurlException $e ){
echo $e->getMessage();
}
Také je možné stahovat soubory pokud nadefinujete downloadFolder čili složku pro uložení stažených souborů
$test = new Curl("http://curl.kdyby.org/prevodnik.asm.zdrojak");
$test->setDownloadFolder(realpath('./download'));
try {
$odpoved = $test->download();
var_dump($odpoved->getHeaders()); // vrací pole hlaviček
// zde je možné získat cestu k souboru
echo $odpoved->getRequest()->getDownloadPath();
// nebo si rovnou otevřít stream
$fp = $odpoved->openFile();
echo fread($fp, $odpoved->getHeader('Content-Length'));
$odpoved->closeFile();
} catch ( CurlException $e ){
echo $e->getMessage();
}
Pokud neuvedete v konstruktoru třídy url, můžete potom snadněji načíst větší množství adres, nebo poslat více požadavků na různé adresy
$test1 = new Curl;
try {
$urls[] = "http://curl.kdyby.org/prevodnik.asm.zdrojak";
$urls[] = "http://curl.kdyby.org/dump_post.php";
foreach( $urls AS $url ){
$odpoved = $test1->get($url);
echo $odpoved->getBody();
var_dump($odpoved->getHeaders()); // vrací pole hlaviček
}
} catch ( CurlException $e ){
echo $e->getMessage();
}
Třída umožňuje poslat 6 typů HTTP požadavků
$curl = new Curl;
$url = "http://curl.kdyby.org/";
$odpoved1 = $curl->get($url, array(
'var1' => 'value1',
'var2' => 'value2'
)); # pošle žádost na http://curl.kdyby.org/?var1=value1&var2=value2
$odpoved2 = $curl->post($url, $post);
$odpoved3 = $curl->head($url, $query);
$odpoved4 = $curl->put($url, $query);
$odpoved5 = $curl->delete($url, $query);
# pokud nespecifikujete jméno souboru, wrapper se ho pokusí získat z url
$url = "http://curl.kdyby.org/prevodnik.asm.zdrojak";
$odpoved6 = $curl->download($url, 'moje_jmeno_souboru.asm');
Není ovšem problém poslat vlastní typ http požadavku
$odpoved = $curl->request('VAS_VLASTNI_TYP_ZADOSTI', $url, $query);
Wrapper podporuje i proxy, čili je možné přidat libovolný počet proxy serverů a wrapper je zkouší tak dlouho dokud žádost přes jednu neprojde v pořádku v nastaveném timeoutu
# poslední tři parametry jsou volitelné
$curl->addProxy('192.168.1.160', 3128 [, $username = Null [, $password = Null [, $timeout = 15]]]);
Hlavičky jde přidávat jednotlivě
$curl->setHeader('Host', '12.345.678.90');
$curl->setHeader('Some-Custom-Header', 'Some Custom Value');
nebo jako pole
$curl->setHeaders(array(
'Host' => '12.345.678.90',
'Some-Custom-Header' => 'Some Custom Value'
));
Ve výchozím nastavení bude wrapper následovat přesměrování, takhle jdou zakázat
$curl->setFollowRedirects(False);
Můžete snadno nastavit referera nebo jméno prohlížeče. V třídě je pár přednastavených tzn. že nemusíte vypisovat celé jejich jméno
| FireFox3 | Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9) Gecko/2008052906
Firefox/3.0 |
|---|---|
| GoogleBot | Mozilla/5.0 (compatible; Googlebot/2.1;
+http://www.google.com/bot.html) |
| IE7 | Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0) |
| Netscape | Mozilla/4.8 [en] (Windows NT 6.0; U) |
| Opera | Opera/9.25 (Windows NT 6.0; U; en) |
$curl->setReferer('http://google.com');
$curl->setUserAgent('FireFox3');
Můžete nastavit, nebo změnit všechny volby jejichž seznam je na adrese curl_setopt. Všechny z následujících způsobů budou fungovat
$curl->setOption('AUTOREFERER', True);
$curl->setOption('autoreferer', True);
$curl->setOption('CURLOPT_AUTOREFERER', True);
$curl->setOption('curlopt_autoreferer', True);
Nebo je můžete nastavit pomocí pole
$curl->setOptions($array);