Index of /subdomains/curl

[ICO]NameLast modifiedSizeDescription

[DIR]Parent Directory  -  
[TXT]README.html26-Jul-2010 19:06 17K 
[   ]dump_post.php31-Jan-2010 19:22 100  
[   ]prevodnik.asm.zdrojak31-Jan-2010 18:20 1.0K 
[   ]secured.php26-Jul-2010 18:01 42  

cURL wrapper

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/

Instalace

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.

Výchozí nastavení v config.ini

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\SafeS­tream

[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"

Příklady použití

Inicializace a základní funkce

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();
}

Typy HTTP požadavků

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);

Proxy

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]]]);

Vlastní hlavičky

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'
));

Nastavení vlastních možností žádosti

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);

TODO