Curl VS fsockopen

Print RSS
286

O
Author
Пацак
0
Вот задумался что из этих двух инструментов лучше использовать.Google дал ответ что curl, но оно и понятно он проще в использовании, а fsockopen более функциональный сетевой инструмент но большую часть кода приходится писать самому.Провёл небольшой тест.

<?
$gtime = array();
#Fsockopen
                $gtime['sock'] = microtime(1);
                for ($i=0; $i<20; $i++){
                        $fp = fsockopen('war/', 80);
                        if ($fp){
                                fputs($fp, 'GET / HTTP/1.0'. PHP_EOL .'User-Agent: Nokia N82'. PHP_EOL . PHP_EOL);
                                while(!feof($fp)){
                                        echo fgets($fp);
                                }
                        }
                        fclose($fp);
                }
                $gtime['sock'] = round(microtime(1) - $gtime['sock'], 4);
                # CURL
                $gtime['curl'] = microtime(1);
                for ($i=0; $i<20; $i++){
                        $ch = curl_init();
                        curl_setopt($ch, CURLOPT_URL, 'http://war/');
                        curl_setopt($ch, CURLOPT_USERAGENT, 'Nokia N82');
                        $result = curl_exec($ch);
                        curl_close($ch);
                }
                $gtime['curl'] = round(microtime(1) - $gtime['curl'], 4);
                
                echo 'CURL: '. $gtime['curl'] .' | Sock '. $gtime['sock'];
?>

Провёл 20 соединений с curl и fsockopen
Результат
CURL: 2.5768 | Sock 0.2176
Получается что fsockopen быстрее, кто считает иначе?
Changed: orel (03.12.2011 / 15:18)

2000 лет д.н.э.
0
Я как раз всегда думал что fsockopen быстрееsmile правда не проверял ни когда

Ктулху
0
Лично я за fsockopen, как раз потому что всё надо делать руками, функционально и работает не только с http
O
Author
Пацак
0
А можно ли использовать 1 дискриптор соединения посылая в него несколько запросов заголовка?
M

Пацак
0
хм хм хм...
$ch = curl_init(); зачем в цыкле то 20 раз пускать?
Это какбы не корректное сравнение...
Вынеси из цикла и посмотри на время выполнения... Думаю будет быстрее...
O
Author
Пацак
0
5. Maksim, Сделал, результат CURL: 2.1548 | Sock 0.2097
А

Оранжевые штаны
0
там всё надо вынести из цикла, кроме запроса страницы

Ктулху
0
Тогда и fsockopen из цикла вынеси D
А

Оранжевые штаны
0
в цикле нужно оставить только curl_exec($ch); , если страница не меняется.

Добавлено через 07:49 сек.
Я использую curl- удобно. Я даже ботов писал, очень радует работа с куками и отправка post данных и работает тоже не только c http.
А

Оранжевые штаны
0
У меня даже костыль есть:
<?php

class page_surfer{

	var $post=''; //Пост данные (Если нужно)
	var $headers=0; //Получать ли заголовки (0,1)
	var $browser='Mozilla/5.0 (Ubuntu; X11; Linux i686; rv:8.0) Gecko/20100101 Firefox/8.0'; //Браузер
	var $cookies_file='';//Файл кук

	function getpage($var1){ //Получает страницу по адресу $var1
		$ch=curl_init("$var1");
		if($this->post!=''){
			curl_setopt($ch,CURLOPT_POST,1);
		}
		curl_setopt($ch,CURLOPT_USERAGENT,$this->browser);
		$headers=array('Accept: text/html','Accept-Language: ru,en-us','Accept-Charset: utf-8;');
		curl_setopt($ch,CURLOPT_HTTPHEADER,$headers);
		if($this->post!=''){
			curl_setopt($ch,CURLOPT_POSTFIELDS,$this->post);
		}
		curl_setopt($ch,CURLOPT_HEADER,$this->headers);
		if($this->cookies_file!=''){
			curl_setopt($ch,CURLOPT_COOKIEJAR,$this->cookies_file);
			curl_setopt($ch,CURLOPT_COOKIEFILE,$this->cookies_file);
		}
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		$r=curl_exec($ch);
		curl_close($ch);
		return $r;
	}
}

?>
Stickers / Tags / Rules / Top topics / Top Posts / Search